1.NAT和iptables理論見:
http://lustlost.blog.51cto.com/2600869/943110
2.引子
近期,有同事抱怨說數據入庫時,由於數據庫所在的服務器只有內網網段,現在只能通過nginx做一個http的代理
來解決外網的數據入庫問題,勉強可用但是只局限於http協議(別的用不了,比如tcp或udp等)。
NAT可以方便的完成這種流量穿通功能,即把外網數據通過NAT(中轉設備)來穿透進內網,內網數據通過NAT(中轉設備)穿透出外網。
3.搭建實驗環境
192.168.25.190設備(當做一個web server使用)
192.168.10.5(中轉設備,做NAT)
192.168.10.7(內網設備)
在192.168.25.190設備上使用命令"python -m SimpleHTTPServer 18088"在18088端口開啟一個web服務。
在192.168.10.5設備上使用命令"iptables -t nat -A POSTROUTING -s 192.168.10.7/32 -j SNAT --to-source 192.168.10.5"開啟SNAT功能.
在192.168.10.7設備上修改gateway網關為192.168.10.5(根據需要,可以自行配置路由,如route add -net 10.0.0.0/24 gw 172.16.93.129)
4.實驗
實驗1
登陸10.7設備使用命令“wget http://192.168.25.190:18088/install.log”(install.log存在),發起一個GET請求成功后對比2端(10.7與25.190)md5值發現一致
觀察25.190上web server日志可以發現到192.168.10.5的請求日志(NAT把10.7的請求轉換為10.5)
實驗2
登陸10.5設備使用命令"tcpdump -i eth0 "icmp" -n"
在10.7設備上使用"ping www.baidu.com"
結果如下:
www.baidu.com對應的ip是61.135.169.125.
可見第1和第3個是原始包,第2和第4個是經過NAT加工的包。