使用 nftables 进行流量转发教程
前言
昨天拿到了一台 po0 的腾讯云广州 BGP 测试机器,可以和特定的 HK VPS 通过腾讯云联网 CCN 走内网通信。机器目前可供购买(需要实名认证)。

购买地址:https://console.po0.com/store/tencent-can-bgp
晚间,FxTransit 上新了原生 IP 的 HK Tier1 机器,机器最低年付 36USD 起,拥有 HK 原生 IP 且超量限速 100Mbps。并且,这正是一台可以和腾讯云广州 BGP 走内网通信的 VPS,旋即开了一台机器来测试。

购买地址:https://fxtransit.io/aff.php?aff=5
简单测试一波机器内网延迟:
64 bytes from 103.197.x.x: icmp_seq=1 ttl=56 time=5.72 ms
64 bytes from 103.197.x.x: icmp_seq=2 ttl=56 time=5.82 ms
64 bytes from 103.197.x.x: icmp_seq=3 ttl=56 time=5.75 ms
64 bytes from 103.197.x.x: icmp_seq=4 ttl=56 time=5.70 ms
64 bytes from 103.197.x.x: icmp_seq=5 ttl=56 time=5.77 ms
64 bytes from 103.197.x.x: icmp_seq=6 ttl=56 time=5.76 ms
64 bytes from 103.197.x.x: icmp_seq=7 ttl=56 time=5.75 ms
64 bytes from 103.197.x.x: icmp_seq=8 ttl=56 time=5.75 ms
64 bytes from 103.197.x.x: icmp_seq=9 ttl=56 time=5.74 ms
64 bytes from 103.197.x.x: icmp_seq=10 ttl=56 time=5.83 ms
因为以前使用直连机器居多,没怎么使用过高贵的内网专线转发,所以搭建上并不熟练,也是一个向 AI 学习的过程,这里记录一下简单的步骤。
出口 HK VPS 上搭建代理
运行 Shadowsocks-rust 2022 一键脚本:
bash <(curl -sL https://raw.githubusercontent.com/yahuisme/ss-2022/main/install.sh)
得到代理配置(示例端口 12345):
ss://TjE1NzItc2xkV1RzLWtQYy1NMzFBLXh5NTpVb0Q1c1hrSmRGT2lNVG8xQjV4Y3NQdz09@103.197.x.x:12345#FXT-HK-TXGZ-ss2022
国内 VPS 开启内网转发和 BBR
sudo tee /etc/sysctl.d/99-bbr.conf > /dev/null <<EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
echo "配置已应用。"
创建 nftables 配置文件
sudo tee /etc/nftables.conf > /dev/null << 'EOF'
#!/usr/sbin/nft -f
# --- 变量定义
define RELAY_PORT_IN = 12345
define DEST_IP = 103.197.x.x
define DEST_PORT_OUT = 54321
define RELAY_LAN_IP = 172.30.x.x
flush ruleset
table ip nat {
# --- PREROUTING (DNAT) ---
chain prerouting {
type nat hook prerouting priority -100; policy accept;
# 规则: SS-2022 (入口 $RELAY_PORT_IN -> 出口 $DEST_PORT_OUT)
tcp dport $RELAY_PORT_IN dnat to $DEST_IP:$DEST_PORT_OUT
udp dport $RELAY_PORT_IN dnat to $DEST_IP:$DEST_PORT_OUT
}
# --- POSTROUTING (SNAT) ---
chain postrouting {
type nat hook postrouting priority 100; policy accept;
# 规则: SS-2022 (匹配发往出口 $DEST_IP:$DEST_PORT_OUT 的流量, SNAT 为内网 IP)
ip daddr $DEST_IP tcp dport $DEST_PORT_OUT snat to $RELAY_LAN_IP
ip daddr $DEST_IP udp dport $DEST_PORT_OUT snat to $RELAY_LAN_IP
}
}
EOF
变量示例说明(请自行替换 IP 和对应端口):
香港 VPS(出口)IP 和端口: 103.197.x.x:12345
大陆 VPS(入口)IP 和端口: 129.204.x.x:54321
大陆 VPS(入口)内网 IP: 172.30.x.x
加载配置并设置开机自启
sudo nft -f /etc/nftables.conf && sudo systemctl enable nftables && sudo systemctl restart nftables
最终客户端使用的代理配置(示例)
ss://TjE1NzItc2xkV1RzLWtQYy1NMzFBLXh5NTpVb0Q1c1hrSmRGT2lNVG8xQjV4Y3NQdz09@129.204.x.x:54321#FXT-HK-TXGZ-ss2022
说明:其它配置不变,仅将 HK VPS(出口)IP 103.197.x.x 替换为大陆 VPS(入口)的公网 IP 129.204.x.x,并将对应端口 12345 更换为 54321 即可。
相关详细测评:
PortChannel Zero 腾讯云广州 BGP VPS 测试记录
Fxtransit HK Tier1 VPS 测试记录
版权声明:本文为原创文章,版权归 𝙈𝙄𝙎𝘼𝙆𝘼.𝙀𝙎 所有,转载请联系博主获得授权。
本文地址:https://misaka.es/archives/59.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。
如果是国外的线路机器转发落地机器的话
可以用其他协议吗,比如vless。
这种建议用一些面板转发,配置更方便直观