流量走向:
vps中转:客户端 --> GFW --> A服务器 --> B服务器(落地) --> YouTube --> 返回客户端
专线:客户端 --> 隧道专线 --> 专线出口 --> A服务器(落地) --> YouTube --> 返回客户端
1、iptables
A服务器IP:2.2.2.2 端口:20000
B服务器IP:6.6.6.6 端口:60000
以下都在A服务器上操作
首先在服务器上开启 tcp 转发:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
使其生效:sysctl -p
好像Debian11以上就弃用了iptables,来安装一下:
apt install iptables -y
把A服务器 20000 端口流量转发到B服务器的 60000 端口上
在PREROUTING上修改目的地址:
iptables -t nat -A PREROUTING -p tcp --dport 20000 -j DNAT --to-destination 6.6.6.6:60000
在POSTROUTING上修改源地址:
# 2.2.2.2 是A服务器IP,也就是转发服务器IP
iptables -t nat -A POSTROUTING -d 6.6.6.6 -p tcp --dport 60000 -j SNAT --to 2.2.2.2
# 或者直接用MASQUERADE自动获取源IP,两条命令二选一
iptables -t nat -A POSTROUTING -d 6.6.6.6 -p tcp --dport 60000 -j MASQUERADE
为了防止在FORWARD上面被丢弃,添加两条规则允许通过:
iptables -I FORWARD -d 6.6.6.6 -p tcp --dport 60000 -j ACCEPT
iptables -I FORWARD -s 6.6.6.6 -p tcp --sport 60000 -j ACCEPT
最后,为了使规则永久生效,不至于重启服务器后丢失,安装个iptables-persistent
apt install iptables-persistent
安装完成后写入规则
iptables-save > /etc/iptables/rules.v4
补充
如果你的落地机使用的是nat机,可能由于部分原因需要更换ip或端口,请看如下演示
# 删除现有规则
iptables -t nat -D PREROUTING -p tcp --dport 20000 -j DNAT --to-destination 6.6.6.6:60000
iptables -t nat -D POSTROUTING -d 6.6.6.6 -p tcp --dport 60000 -j SNAT --to 2.2.2.2
iptables -D FORWARD -d 6.6.6.6 -p tcp --dport 60000 -j ACCEPT
iptables -D FORWARD -s 6.6.6.6 -p tcp --sport 60000 -j ACCEPT
# 添加新的规则
iptables -t nat -A PREROUTING -p tcp --dport 20000 -j DNAT --to-destination 7.7.7.7:60000
iptables -t nat -A POSTROUTING -d 7.7.7.7 -p tcp --dport 60000 -j SNAT --to 2.2.2.2
iptables -I FORWARD -d 7.7.7.7 -p tcp --dport 60000 -j ACCEPT
iptables -I FORWARD -s 7.7.7.7 -p tcp --sport 60000 -j ACCEPT
2、realm
首先下载最新的realm
wget https://github.com/zhboner/realm/releases/download/v2.6.0/realm-x86_64-unknown-linux-gnu.tar.gz
tar -zxvf realm-x86_64-unknown-linux-gnu.tar.gz
chmod +x realm
测试运行
realm -l 0.0.0.0:6666 -r 6.6.6.6:7777
配置文件(通常在realm同级目录下新增一个config.toml文件)
[log]
# 日志级别: off,debug,info,error,warn 测试时可用debug, 验证ok可用改成warn
level = "warn"
output = "/var/log/realm.log"
[network]
no_tcp = false
use_udp = true
# 负载均衡模式(通常不用)
#[[endpoints]]
#listen = "0.0.0.0:6666"
#remote = "6.6.6.6:7777"
# extra_remotes = ["7.7.7.7:7777","8.8.8.8:7777"]
# balance = "roundrobin: 4,2,1"
[[endpoints]]
listen = "0.0.0.0:6666"
remote = "6.6.6.6:7777"
补充:如果转发地址是ipv6,请使用[]将ipv6地址包起来
设置开机自启
nano /etc/systemd/system/realm.service
#将下方复制粘贴进去
[Unit]
Description=realm
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
#如果你用的是2.6以下版本,请取消注释这行
#DynamicUser=true
WorkingDirectory=/root
ExecStart=/root/realm -c /root/config.toml
[Install]
WantedBy=multi-user.target
开机并启动
systemctl daemon-reload
systemctl enable realm
systemctl restart realm
systemctl status realm