首先需要安装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