shadow-tls 处理udp流量
[TOC]
解决方案参考来源 surge community
2025-06-23更新
Ctrl+C 复制 Ctrl+S 导出
# 在ipv6 only的机器下配置<span class="line"> </span>
<span class="line"> </span><span class="line"> </span>
<span class="line"> </span>table ip6 nat {<span class="line"> </span>
<span class="line"> </span> chain prerouting {<span class="line"> </span>
<span class="line"> </span> type nat hook prerouting priority dstnat; policy accept;<span class="line"> </span>
<span class="line"> </span> iifname "eth0" ip6 daddr 公网ipv6 udp dport 21042 dnat to :19569<span class="line"> </span>
<span class="line"> </span> }<span class="line"> </span>
<span class="line"> </span><span class="line"> </span>
<span class="line"> </span> chain postrouting {<span class="line"> </span>
<span class="line"> </span> type nat hook postrouting priority srcnat; policy accept;<span class="line"> </span>
<span class="line"> </span> oifname "eth0" udp dport 19569 masquerade<span class="line"> </span>
<span class="line"> </span> }<span class="line"> </span>
<span class="line"> </span>}13 行
nftables 解决方案
Ctrl+C 复制 Ctrl+S 导出
nft add table inet my_nat_table<span class="line"> </span>
<span class="line"> </span><span class="line"> </span>
<span class="line"> </span>nft add chain inet my_nat_table prerouting { type nat hook prerouting priority filter \; policy accept \; }<span class="line"> </span>
<span class="line"> </span><span class="line"> </span>
<span class="line"> </span>nft add chain inet my_nat_table postrouting { type nat hook postrouting priority srcnat \; policy accept \; }<span class="line"> </span>
<span class="line"> </span><span class="line"> </span>
<span class="line"> </span>nft add rule inet my_nat_table prerouting iifname "eth0" udp dport xxxxx(替换成shadowTLS 的端口) dnat to :xxxxxx(替换成 $$-rust的端口)<span class="line"> </span>
<span class="line"> </span><span class="line"> </span>
<span class="line"> </span>nft add rule inet my_nat_table postrouting oifname "eth0" udp dport xxxxxx(替换成 $$-rust的端口) masquerade9 行
nftables 部分指令
- 输出到文件持久化
Ctrl+C 复制 Ctrl+S 导出
nft list ruleset > /etc/nftables.conf1 行
- 加载规则
Ctrl+C 复制 Ctrl+S 导出
nft -f /etc/nftables.conf1 行
ss-rust 解决方案
Ctrl+C 复制 Ctrl+S 导出
{<span class="line"> </span>
<span class="line"> </span> "server": "::",<span class="line"> </span>
<span class="line"> </span> "server_port": xxxxx(shadow TLS端口,让$$来接管这个端口的 udp 流量),<span class="line"> </span>
<span class="line"> </span> "password": "xxxxxxxx",<span class="line"> </span>
<span class="line"> </span> "method": "2022-blake3xxxxxxxx",<span class="line"> </span>
<span class="line"> </span> "fast_open": true,<span class="line"> </span>
<span class="line"> </span> "mode": "udp_only",<span class="line"> </span>
<span class="line"> </span> "user": "nobody",<span class="line"> </span>
<span class="line"> </span> "timeout": 300<span class="line"> </span>
<span class="line"> </span>}10 行