iptables-NAT转换
准备工作
1、desktop用于模拟外网IP:192.168.3.2
2、proxy用于连接内外网:外网IP192.168.3.3 内网IP:192.168.200.2
3、web1和web2位于内网:IP地址分别为192.168.200.3和192.168.200.4
web1和web2的默认网关都设置为192.168.200.2
![在这里插入图片描述](https://img-blog.csdnimg.cn/de02ef2e371942b499dafca127e7d6a1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeXV5dXl1bGlhbmcwMA==,size_20,color_FFFFFF,t_70,g_se,x_16
转换源地址
在proxy把源IP来自192.168.200.0/24网段的IP地址转换成192.168.3.3:
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j SNAT --to-source 192.168.3.3
测试:
在做源地址转换前,web1和web2是ping不通IP地址192.168.3.2,在做完把源地址为192.168.200.0/24网段IP地址转成源地址192.168.3.3后,web1和web2就可以ping通192.168.3.2.
web1:
web2:
在proxy的eth0和eth1上抓包
tcpdump -i eth1 -nn tcp port 80
tcpdump -i eth0 -nn tcp port 80
在web1上访问desktop的web服务:curl 192.168.3.2
结果如图:
eth1上显示请求发送为: 192.168.200.3.58580 > 192.168.3.2.80
在eth0上显示请求发送为:192.168.3.3.58580 > 192.168.3.2.80
结论:源地址来自192.168.200.0/24网段的IP地址的数据包在经过Proxy后,其源地址被更改为了192.168.3.3。
目标地址和目标端口转换
将web1当作web服务器,其监听端口更改到8080
在proxy上先清空先前nat表中的规则,添加以下规则:
在proxy上来自192.168.3.2的访问192.168.3.3的tcp 80端口的数据包被转换成了访问192.168.200.3的tcp 8080的数据包:
在desktop进行测试:
desktop对192.168.3.3的web访问的响应来自192.168.200.3
在proxy的eth0和eth1上分别抓取数据包:
eth0网卡:
eth1网卡:
来自desktop对proxy 80端口的web请求,被proxy转换成了对web1 8080端口的web请求后,由eth1网卡发送给了web1,来自web1响应desktop1的响应经过proxy后,变成了proxy 80端口对desktop的响应。