本文最后更新于 2024-02-28,文章原本内容可能已经过时,请查看是否有更新内容。

前言

老刘原话
CleanShot 2024-02-28 at 20.40.49@2x.png

正好最近重建博客,需要补充这个,所以本文尝试使用iptablesshadow-tls端口的udp流量转发至shadowsocks端口


搭建Shadowsocks+Shadow-TLS

Surge && shadow-tls v3 | Lalala’s Blog

这篇是snell+stls,ss类似(doge,不过不管怎么搭建的,反正都可以用

我的配置

docker-compose.yml
CleanShot 2024-02-28 at 20.33.12@2x.png

ss配置
CleanShot 2024-02-28 at 20.46.50@2x.png


UDP转发

没转发时的ss+shadow-tls测试

CleanShot 2024-02-28 at 20.37.41@2x.png

很明显没有UDP

那么使用下面两行命令

sudo iptables -t nat -A PREROUTING -p udp --dport 8443 -j REDIRECT --to-port 9087
sudo iptables -t nat -A OUTPUT -p udp --dport 8443 -j REDIRECT --to-port 9087

⚠️注意:换成自己对应的端口

这样,任何发送到我的 shadow-tls 端口 (8443) 上的 UDP 流量都会被自动转发到 ss节点端口 (9087) 上

使用以下命令查看NAT表中的所有规则

sudo iptables -t nat -L

如图

CleanShot 2024-02-28 at 20.34.45@2x.png

现在再进行测试

CleanShot 2024-02-28 at 20.35.51@2x.png

SUCCESS!!

但是现在有一个问题,就是reboot vps之后,这些规则就没了,所以需要用到iptables-persistent

下载iptables-persistent

sudo apt-get update
sudo apt-get install iptables-persistent

在安装过程中,系统可能会询问你是否要保存当前的 IPv4 和 IPv6 规则。选择是(Yes),以便保存你当前的 iptables 规则,如下图

CleanShot 2024-02-28 at 20.38.29@2x.png

CleanShot 2024-02-28 at 20.38.37@2x.png

直接回车即可

现在iptables-persistent 服务会在系统启动时自动加载/etc/iptables/rules.v4/etc/iptables/rules.v6 中保存的规则,无需进一步的手动干预

至此全部完成!!


删除iptables规则

如果你没有使用iptables-persistent,那么reboot你的vps即可

如果使用了,那么使用下面的命令来删除iptables规则

sudo iptables -t nat -D PREROUTING -p udp --dport 8443 -j REDIRECT --to-port 9087
sudo iptables -t nat -D OUTPUT -p udp --dport 8443 -j REDIRECT --to-port 9087

⚠️注意:换成自己对应的端口

然后输入以下命令保存规则的修改

sudo netfilter-persistent save

其他

根据老刘的描述,还有一个方法

  1. 搭建一个新的 shadowsocks节点: 在你的服务器上搭建一个新的 ss节点 ,在配置文件中指定 "mode": "udp_only"

  2. 注意指定不同的端口: 也就是说我原本的ss端口是9087,这个新的节点要换一个,确保它不会与 shadow-tls 或其他服务的端口冲突

  3. 客户端配置正确: 客户端需要配置为将 UDP 流量发送到这个新节点的端口上

总结:麻烦多了,还是snell+stls吧