把本机某个端口转发给另外一台机器,一定要下面两条指令联合使用:
# iptables -t nat -A PREROUTING -p tcp --dport 94 -j DNAT --to 10.144.45.94:443
# iptables -t nat -A POSTROUTING -j MASQUERADE
Linux下,有些发行版把1024以下的端口号,作为ROOT特权用处,所以Tomcat用80启动就无法正常运行了。
Linux可以对端口做重定向,例如以下指令把80端口转向为8080:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
上述指令,对127.0.0.1 IP不做转发,如果要对127.0.0.1:8080也转发到127.0.0.1:80,则需要以下指令:
sudo iptables -t nat -I OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080
保存规则,保存到自己文件路径:
iptables-save > /etc/iptables.rules
添加网络启动时自动启动iptables,需要修改此文件/etc/network/interfaces,添加如下一行:
pre-up iptables-restore < /etc/iptables.rules
给个模版做参考,完成后就是这个样子:
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
pre-up iptables-restore < /etc/iptables.rules
iptables不会自动保存规则并重启机器后自动加载,要永久起作用,请安装
sudo apt-get install iptables-persistent
sudo /etc/init.d/iptables-persistent save
sudo /etc/init.d/iptables-persistent reload
端口转发
一 从一台机到另一台机端口转发
启用网卡转发功能
#echo 1 > /proc/sys/net/ipv4/ip_forward
举例:从192.168.0.132:21521(新端口)访问192.168.0.211:1521端口
a. 同一端口转发(192.168.0.132上开通1521端口访问
iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 1521 -j DNAT --to 192.168.0.211
iptables -t nat -I POSTROUTING -p tcp --dport 1521 -j MASQUERADE
b. 不同端口转发(192.168.0.132上开通21521端口访问)
iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21521 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 21521 -j DNAT --to-destination 192.168.0.211:1521
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.0.132
以上两条等价配置(更简单[指定网卡]):
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 31521 -j DNAT --to 192.168.0.211:1521
iptables -t nat -A POSTROUTING -j MASQUERADE
保存iptables
#service iptables save
#service iptables restart
二 用iptables做本机端口转发
代码如下:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
估计适当增加其它的参数也可以做不同IP的端口转发。
如果需要本机也可以访问,则需要配置OUTPUT链(********特别注意:本机访问外网的端口会转发到本地,导致访不到外网,如访问yown.com,实际上是访问到本地,建议不做80端口的转发或者指定目的 -d localhost):
iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080
原因:
外网访问需要经过PREROUTING链,但是localhost不经过该链,因此需要用OUTPUT。