NAT设置
使用Iptables设置NAT
- 查看NAT映射关系列表
sudo iptables -t nat -L -n --line-number
--line-number
: 显示规则的<规则的行号>
- 查看NAT命令列表
sudo iptables -t nat -S
-
开NAT:
- 在第n条前插入新规则:使新规则成为第n条规则,而原来编号>=n的规则则编号加1
sudo iptables -t nat -I PREROUTING <n> -d <公网ip>/32 -i <公网访问的网卡> -p tcp -m tcp --dport <公网端口> -j DNAT --to-destination <内网ip>:<内网端口>
- 替换第n条规则:
sudo iptables -t nat -R PREROUTING <n> -d <公网ip>/32 -i <公网访问的网卡> -p tcp -m tcp --dport <公网端口> -j DNAT --to-destination <内网ip>:<内网端口>
- 在PREROUTING的结尾添加规则
sudo iptables -t nat -A PREROUTING -d <公网ip>/32 -i <公网访问的网卡> -p tcp -m tcp --dport <公网端口> -j DNAT --to-destination <内网ip>:<内网端口>
上面命令中的
/32
-m tcp
可省,此即缺省值 -
删除一条NAT规则
sudo iptables -t nat -D PREROUTING <规则的行号>
-
去除重复的iptables规则,详见
sudo iptables-save | awk '{if($1=="COMMIT"){delete x}}$1=="-A"?!x[$0]++:1' | sudo iptables-restore
请勿使用以下方法:
-
没有排序(
sort
)就用uniq
,会有漏网之鱼sudo iptables-save | uniq | 【请勿使用本方法】 sudo iptables-restore
-
sort
会打乱iptables规则的排序,使得规则的执行顺序发生变化(编号从小到大执行),详见iptables详解 处理顺序sudo iptables-save | sort | uniq | 【请勿使用本方法】 sudo iptables-restore
-
会误删“COMMIT”这种正常的重复语句。
sudo iptables-save | awk '!x[$0]++' | 【请勿使用本方法】sudo iptables-store
-