安装环境
- 一台可以访问互联网的 VPS ,能与被转发的端口互相通信
- 机器系统为 Linux 发行版 Debian、Redhat 系列,教程使用系统为 Debian 10 和 CentOS 8
- 系统镜像采用公有云(Ucloud)的公共镜像
- 关闭系统 SELinux
教程开始
Redhat (CentOS 8)系列
关闭并禁用系统默认的 Firewalld 防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
安装并启用 Iptables
dnf install iptables iptables-services -y
systemctl start iptables.service
systemctl enable iptables.service
CentOS 7 安装并启用 Iptables
yum install iptables iptables-services -y
systemctl start iptables.service
systemctl enable iptables.service
清空 Iptables 默认规则并保存
iptables -F
iptables -X
iptables -Z
service iptables save
开启系统内核转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
设置转发规则
iptables -t nat -A PREROUTING -p tcp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
iptables -t nat -A PREROUTING -p udp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]
保存重启 Iptables
service iptables save
service iptables restart
Debian (Debian 10)系列
Debian 系列发行版系统默认都是使用的 Iptables 顾不需要再次安装
清空 Iptables 默认规则并保存
iptables -F
iptables -X
iptables -Z
iptables-save > /etc/iptables.up.rules
开启系统内核转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
设置转发规则
iptables -t nat -A PREROUTING -p tcp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
iptables -t nat -A PREROUTING -p udp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]
保存规则并重启 Iptables
iptables-save > /etc/iptables.up.rules
iptables-restore < /etc/iptables.up.rules
至此简单的使用 Iptables 转发端口(流量)的教程就到此结束,一下是进阶教程
进阶教程
多端口转发方案
iptables -t nat -A PREROUTING -p tcp -m tcp --dport [本机端口段开始:本机端口段结束] -j DNAT --to-destination [目标IP]
iptables -t nat -A PREROUTING -p udp -m udp --dport [本机端口段开始:本机端口段结束] -j DNAT --to-destination [目标IP]
iptables -t nat -A POSTROUTING -d [目标IP] -p tcp -m tcp --dport [目标端口段开始:目标端口段结束] -j SNAT --to-source [本机主网卡IP]
iptables -t nat -A POSTROUTING -d [目标IP] -p udp -m udp --dport [目标端口段开始:目标端口段结束] -j SNAT --to-source [本机主网卡IP]
查看目前 Iptables 规则
iptables -nL --line-number
查看目前 Iptables 的 NAT(转发)规则
iptables -t nat -vnL
删除指定 NAT(转发)规则
通过查看 NAT 规则找到规则对应的列号(一条规则就是一列,初始号为 1)
iptables -t nat -D POSTROUTING [规则列号]
iptables -t nat -D PREROUTING [规则列号]
总结
使用系统防火墙如 Iptables 等来转发流量是最稳定、资源开销最低的一种方式,同时可以看到转发后从使用者本地通过转发端到被转发端的具体延迟,而不是像其他第三方工具转发出来只会显示使用者本地到转发端的延迟,同时资源开销也很大,两者各有优劣;下一篇教程可能是使用 Firewalld 转发端口(流量)的教程,或者是如 Nginx、Brook、Gost、Socat 等第三方工具来实现端口(流量)