一.环境
1.检查iptables支持的转发模块
lsmod |grep nat
image.png如果不存在可以通过命令
modprobe xxx
加载
2.打开服务器的IP转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
有些机器如果是DHCP PPPOE的话还要打开
echo "1" >/proc/sys/net/ipv4/ip_dynaddr
或者
编辑/etc/sysctl.conf文件
net.ipv4.ip_forward=1
然后在命令行sysctl -p
3.检查iptables规则
image.png如果最后一条规则如上图所示,就要加多一台规则
iptables -A INPUT -p tcp --dport $outerport -j ACCEPT
并且filter表中的FORWARD链要支持转发。
iptables -I FORWARD -j ACCEPT
或者iptables -A FORWARD -p tcp --dport $outerport -j ACCEPT
二.本地端口转发
#!/bin/bash
outerport=80
#对外端口
innerport=8080
#内部端口
iptables -t nat -A PREROUTING -p tcp --dport $outerport -j REDIRECT --to-ports $innerport
iptables -t nat -A OUTPUT -d localhost -p tcp --dport $outerport -j REDIRECT --to-ports $innerport
特别注意:本机访问外网的端口会转发到本地,导致访不到外网,如访问对外ip,实际上是访问到本地,建议不做80端口的转发或者指定目的 -d localhost,要在nat表的output链加上一条规则如上,否则本地不能访问outerport。
三.内网端口转发
#!/bin/bash
outerport=80
#对外端口
outerip=121.13.65.3
#对外ip(可访问)
$innerport=8080
#内部端口
innerip=192.168.1.2
#内网ip
iptables -t nat -A PREROUTING -p tcp --dport $outerport -j DNAT --to-destination $innerip:$innerport
iptables -t nat -A POSTROUTING -d $innerip -p tcp --dport $innerport -j SNAT --to $outerip
iptables -t nat -A OUTPUT -d $outerip -p tcp --dport $outerport -j DNAT --to $innerip:$innerport
网友评论