天天看点

IPTABLES SNAT DNAT

iptables 命令基本参数和用法

iptables –[ A | I 链] [ -i | o 网络接口 ] [ -p 协议 ] [ -s 来源ip/网域 ] [ -d 目标ip/网域 ] –j [ ACCEPT | DROP ]
参数 作用
-P 设置默认策略:iptables -P INPUT (DROP|ACCEPT)
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I   num 在规则链的头部加入新规则
-D  num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d 匹配目标地址
-i   网卡名称 匹配从这块网卡流入的数据
-o  网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
--dport  num 匹配目标端口号
--sport  num 匹配来源端口号

NAT(Network AddressTranslation网络地址转换)

首先说说局域网内封包的传送,

1. 先经过 NAT table 的 PREROUTING 链;

2. 经路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;

3. 再经过 Filter table 的 FORWARD 链;

4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。

SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如下图所示,如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT

SNAT:即源地址转换

能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题,路由器也就使用此技术,使用 POSTROUTING

IPTABLES SNAT DNAT
# 由上图可知,需要将 192.168.10.10 转换为 111.196.211.212,iptables命令如下:

iptables -t nat -A POSTROUTING -s 192.168.10.10 -o eth1 -j SNAT --to-source 111.196.221.212

# 外网IP地址不稳定的情况即可使用MASQUERADE(动态伪装),能够自动的寻找外网地址并改为当前正确的外网IP地址

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
           

DNAT:目地地址转换

则能够让外网用户访问局域网内不同的服务器。使用 PREROUTING

IPTABLES SNAT DNAT
# 由上图可知,目标地址 192.168.10. 6 在路由前就转换成 61.240.149.149

iptables -t nat -A PREROUTING -i eth1 -d 61.240.149.149 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.6:80
           

将外网访问80端口的数据转发到8080端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080