首先需要安装iptables

apt-get install iptables -y

开启防火墙的ipv4转发

echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
单端口 端口转发

1. 同端口 端口转发

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]

以下示例,假设你的中转服务器是 1.1.1.1 ,你的远程端口是3389 ,而你这台正在操作的VPS的主网卡绑定IP(中转服务器)是 2.2.2.2 。

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3389 -j DNAT --to-destination 1.1.1.1:3389
iptables -t nat -A PREROUTING -p udp -m udp --dport 3389 -j DNAT --to-destination 1.1.1.1:3389
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 3389 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 3389 -j SNAT --to-source 2.2.2.2

这个时候你远程桌面客户端填写登录信息的时候,账号配置和端口填写都不变,只需要修改IP为中转服务器IP即可 。

2. 不同端口 端口转发

将本地服务器(中转服务器 2.2.2.2 )的 10000 端口转发至目标IP(被中转服务器)为 1.1.1.1 的 30000 端口

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 1.1.1.1:30000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000 -j DNAT --to-destination 1.1.1.1:30000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 30000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 30000 -j SNAT --to-source 2.2.2.2

不同端口 端口转发

1. 同端口 端口转发

将本地服务器(中转服务器 2.2.2.2 )的 10000~30000 端口转发至目标IP(被中转服务器)为 1.1.1.1 的 10000~30000 端口

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000:30000 -j DNAT --to-destination 1.1.1.1:10000-30000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000:30000 -j DNAT --to-destination 1.1.1.1:10000-30000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 10000:30000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 10000:30000 -j SNAT --to-source 2.2.2.2

这个时候你的远程桌面客户端填写登录信息的时候,账号配置和端口填写都不变,只需要修改IP为中转服务器IP即可 。

2. 不同端口 端口转发

将本地服务器(中转服务器 2.2.2.2 )的 10000~20000 端口转发至目标IP(被中转服务器)为 1.1.1.1 的 30000~40000 端口

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000:20000 -j DNAT --to-destination 1.1.1.1:30000-40000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 1.1.1.1:30000-40000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 30000:40000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 30000:40000 -j SNAT --to-source 2.2.2.2

这个时候你的远程桌面客户端填写登录信息的时候,端口应该填 10000~2000 而不是 30000~40000 。

保存iptables配置

CentOS 系统:

service iptables save

Debian/Ubuntu 系统:

iptables-save > /etc/iptables.up.rules
查看NAT规则
iptables -t nat -vnL POSTROUTING
iptables -t nat -vnL PREROUTING
删除NAT规则

通过上面的查看规则命令,查看规则后,确定你要删除的规则的顺序,下面的命令是删除 第一个 规则。

iptables -t nat -D POSTROUTING 1
iptables -t nat -D PREROUTING 1

配置iptables开机加载
CentOS 系统:

service iptables save
chkconfig --level 2345 iptables on

Debian/Ubuntu 系统:

iptables-save > /etc/iptables.up.rules
echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables

Ubuntu 18.04 及之后的系统:

iptables-save > /etc/iptables.up.rules
nano /etc/rc.local

添加一行:

iptables-restore < /etc/iptables.up.rules

如果没有找到 rc.local 则执行下面的操作:

ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
nano /etc/systemd/system/rc-local.service

末尾添加:

[Install]
WantedBy=multi-user.target
Alias=rc-local.service

创建 rc.local

nano /etc/rc.local

添加:

#!/bin/bash
iptables-restore < /etc/iptables.up.rules

添加 rc.local 权限:

chmod 755 /etc/rc.local

最后修改:2022 年 12 月 07 日
如果觉得我的文章对你有用,请随意赞赏