vps

在vps上通过ew做流量转发。

./ew_for_linux64 -s ssocksd -l 44444

宿主机

在宿主机,通过redsocks + iptables 将所有流量进行转发。

安装redsocks

apt install redsocks

配置redsocks配置文件

# /etc/redsocsk.conf
base {
	log_debug = off;
	log_info = on;
	log = "syslog:daemon"; // log = "file:/tmp/red.log"
	daemon = on;
	user = redsocks;
	group = redsocks;
	redirector = iptables;
}
redsocks {
	local_ip = 127.0.0.1;
	local_port = 12345;
	ip = <vps_ip>;
	port = 44444;
	type = socks5;
}

配置iptables

iptables -t nat -N REDSOCKS # 在nat下新增一个链
# 忽略宿主机和vps的地址
iptables -t nat -A REDSOCKS -d 192.168.88.123 -j RETURN
iptables -t nat -A REDSOCKS -d <vps_ip> -j RETURN
# 忽略本地地址 
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN 
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN 
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN 
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN 
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN 
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN 
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN 
# 其余tcp包都转发到redsocks端口
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345  #  <redsocket监听的本地端口>
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS

因为在 nat表做的转发,所以可以先监听 mangle 表的输入数量

iptables -t mangle -I OUTPUT -d 39.156.66.14 -j ACCEPT
iptables -t mangle -I OUTPUT -d 139.199.116.80 -j ACCEPT

iptables -t filter -I OUTPUT -d 39.156.66.14 -j ACCEPT
iptables -t filter -I OUTPUT -d 139.199.116.80 -j ACCEPT

iptables -t mangle -I POSTROUTING -d 39.156.66.14 -j ACCEPT
iptables -t mangle -I POSTROUTING -d 139.199.116.80 -j ACCEPT

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/54177d94-75c1-4060-9ebc-ca222118771b/Untitled.png

这里我没有完全理解,当我curl www.baidu.com 的时候,理论上来讲先经过第一步,发送了7个包。但是被 REDSOCKS钩住了,REDSOCKS和服务器交换握手存在2个包(步骤2)。然后一开始的7个包全都被发到vps上,所以发往VPS的一共有 7 + 2 个包(步骤3、4、5)。(但是我不懂为啥nat部分只显示了2个包,理论上应该是7个包才对)