NAT:(工作在网络和传输层) 过载技术
Basic NAT:静态NAT 一个内部主机,分配一个外网地址 NAPT:动态NAT,网络地址端口转换;net会话表 源地址转换:SNAT 用于内网主机访问互联网 目标地址转换:DNAT 让互联网上主机访问本地内网上的某服务器上的服务(发布)
iptables基于SNAT和DNAT这两个目标(target)实现地址转换技术
-j SNT --to-source SIP 规则添加:POSTROUTING链 -j MASQUERADE 动态获取(外网地址是动态的) -j DNAT --to-destination DIP{:PORT} 支持端口映射
源地址转换示例
// 此时 filter 表上的 FORWARD 链 要打开(会经过此表中的此链) [root@nat ~]# iptables -t nat -F [root@nat ~]# iptables -t nat -L -n [root@nat ~]# iptables -t nat -A POSTROUTING -s 10.1.249.158 -j SNAT --to-source 192.168.2.3 [root@nat ~]# iptables -t nat -L -n Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 10.1.249.158 0.0.0.0/0 to:192.168.2.3 内部主机访问外部主机 [root@nei ~]# curl http://192.168.2.4/index.html hello 查看外部主机中web的访问日志 [root@wai ~]# tail /var/log/httpd/access_log 192.168.2.3 - - [13/Oct/2016:21:40:58 +0800] 192.168.2.3 - - [13/Oct/2016:21:40:59 +0800] //主机,我们的内部主机IP为10.1.249.158 //而httpd的访问日志为192.168.2.3的访问 //说明成功实现了源地址转换
目标地址转换示例(对80端口的转换)
[root@luyou ~]# iptables -t filter -F [root@luyou ~]# iptables -t nat -F [root@luyou ~]# iptables -t nat -A PREROUTING -d 10.1.249.125 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.4 Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- 0.0.0.0/0 10.1.249.125 tcp dpt:80 to:192.168.2.4 [root@luyou ~]# netstat -tln | grep "\<80\>" 此时本机上并没有开放80端口 [root@wai ~]# curl http://10.1.249.125 hello --> 此时我们访问为 luyou 主机上的80端口 由上面可知,此服务器上并没有开放80,而是将请求送往 后端服务器
目标地址和端口转换示例(对22端口的转换)
[root@luyou ~]# iptables -t filter -F FORWARD [root@luyou ~]# iptables -t nat -A PREROUTING -d 10.1.249.125 -p tcp --dport 22022 -j DNAT --to-destination 192.168.2.4:22 Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- 0.0.0.0/0 10.1.249.125 tcp dpt:22022 to:192.168.2.4:22 [root@wai ~]# ssh -p 22022 10.1.249.125 --> 连接 luyou 设备的22022端口 [root@nei ~]# --> 连接到 nei 内网的主机上来 [root@luyou ~]# iptables -t nat -L -n -v Chain PREROUTING (policy ACCEPT 42 packets, 4633 bytes) pkts bytes target prot opt in out source destination --> 有报文成功匹配到 1 60 DNAT tcp -- * * 0.0.0.0/0 10.1.249.125 tcp dpt:22022 to:192.168.2.4:22 //此时我们请求luyou这台NAT服务器的22022端口的ssh服务,此时我们nat路由器的ssh服务并没有监听在22022端口, //而是将目标IP和目标端口都进行了转换了,使我们连接到了内网的ssh服务器上
原创文章,作者:sixijie,如若转载,请注明出处:http://www.178linux.com/56515