Linux流量转发工具与Iptables手动实现流量转发详解
背景
公司做境外电商业务,连接远程桌面太操作卡顿,于是申请了香港专线服务器做流量转发,提高远程桌面流畅度。
可用工具
极光面板
这是一个多服务器端口租用管理面板,你可以添加多台服务器及端口,并将其分配给任意注册用户,租户则可以很方便地使用被分配的端口来完成各种操作
项目地址:极光面板 Github
优势: 直接通过面板即可配置转发规则,而且支持多种协议,但是没有对外提供接口。
traffic_forward
这是一个用 Rust 开发的工具,实现用一条命令,完成所有 iptables 所需的流量转发命令,提供了控制台和 Wep Api 两种方式来操作转发配置。
注意:转发主机,必须打开转发
项目地址:github.com/bigbug-gg/traffic_forwa...
优势:提供了 Web Api,有开发能力的小伙伴,可以把转发的功能,做到自己的系统,但需要懂点 Linux。
用例
192.168.17.131:9988 转发到 193.23.11.3:3333
# 添加转发规
sudo traffic_forward add 193.23.11.3:3333 9988
# 上面命令会执行相应的 iptables 命令, 192.168.17.131 为转发主机 IP,工具自动获取
iptables -t nat -I PREROUTING -p tcp --dport 9988 -j DNAT --to-destination 193.23.11.3:3333
iptables -t nat -I POSTROUTING -d 193.23.11.3 -p tcp --dport 3333 -j SNAT --to-source 192.168.17.131
iptables -t filter -I FORWARD -d 193.23.11.3 -p tcp --dport 3333
iptables -t filter -I FORWARD -s 193.23.11.3 -p tcp --dport 3333
iptables -t nat -I PREROUTING -p udp --dport 9988 -j DNAT --to-destination 193.23.11.3:3333
iptables -t nat -I POSTROUTING -d 193.23.11.3 -p udp --dport 3333 -j SNAT --to-source 192.168.17.131
iptables -t filter -I FORWARD -d 193.23.11.3 -p udp --dport 3333
iptables -t filter -I FORWARD -s 193.23.11.3 -p udp --dport 3333
手动 iptables 配置指南
学习资料
了解 iptables 后,下面的具体实现才能看懂。
iptables 详解系列文章 【感谢 朱双印大佬 的系列文章】
思路
使用 iptables 的 PREROUTING 和 POSTROUTING 链 即可完成需求
上机操作
1. 第一步
中转主机提供一个端口,这里以 8083
为例,作为访问入口,把接收到的数据,转发给目标远程桌面IP:
sudo iptables -t nat -I PREROUTING -p tcp --dport 8083 -j DNAT --to-destination 远程桌面IP:端口 -m comment --comment "这里加备注"
可以看到,这里用了 -p tcp
指明了使用 tcp
协议,当也需要 udp
时,用 -p udp
即可:
sudo iptables -t udp -I PREROUTING -p tcp --dport 8083 -j DNAT --to-destination 远程桌面IP:端口 -m comment --comment "这里加备注"
这样,数据就中转出去了。
2. 第二步
目标远程桌面返回了数据,要回传回去
sudo iptables -t nat -A POSTROUTING -d 远程桌面IP -p tcp --dport 远程桌面端口 -j SNAT --to-source 中转主机IP -m comment --comment "这里加备注"
同样,再增加一个 udp
协议:
sudo iptables -t nat -A POSTROUTING -d 远程桌面IP -p udp --dport 远程桌面端口 -j SNAT --to-source 中转主机IP -m comment --comment "这里加备注"
如此,没问题的话,已经可以正常通过 中转主机 访问远程桌面。
3.第三步
如果需要记录中转过程中,使用了多少上、下行流量,用 FORWARD 链即可达到目的:
上行流量:
sudo iptables -t filter -A FORWARD -d 远程桌面IP -p udp --dport 远程桌面端口 -j ACCEPT -m comment --comment "备注些这里:上行流量"
下行流量:
sudo iptables -t filter -A FORWARD -s 远程桌面IP -j ACCEPT -m comment --comment "下行流量"
可以看到,下行命令的除了 改变了-d
为 -s
,还去掉了协议和端口,这表达只要是这个IP(指的是远程桌面)的访问,就记录。
以上就是具体实现方式,有些复杂,需掌握许多前置知识,才能驾驭好 iptables,还好,要是嫌麻烦,就直接使用工具。
本作品采用《CC 协议》,转载必须注明作者和本文链接