一、环境说明
Vmware workstation 10虚拟出三台CentOS6.4—x64,主机A网络环境仅主机配置ip:172.16.10.2/16;
主机B模拟做企业的网关,有两块ip,其中eth0:192.168.5.1/24、eth1:172.16.10.1/16
主机C模拟外网主机,ip:192.168.5.86
其中主机B eth0和主机C要在一个网络,这里是桥接到我的物理网络;
主机B eth1和主机A要在一个网段,可自定义,这里是仅主机网络,
网络拓扑如下:
实验目的:为了让内部主机A能访问主机C,模拟出现实中中小企业通过Linux网关上网,以便节省成本;
实验步骤:
主机A的配置:配置好ip地址:172.16.10.2/16
主机C的配置:配置好ip地址:192.168.5.86,安装http服务yum install httpd
#cat /var/www/html/index.html
This is a test website!
#service httpd restart
网关主机B配置:
开启内核级转发功能:
echo "1" >/proc/sys/net/ipv4/ip_forward
其实到这步,把主机C上的网关指向主机B的eth0 即192.168.5.1 可以实现
主机A到主机C,主机C到主机A之间的通讯;但只能实现这两个网段的通讯,不能到达其他网段,这也不是实验的目的,有兴趣的可以试下!
这里在主机B上做iptables 的SNAT来实现,以达到内网通过主机B来访问其他外网;
#iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o eth0 -j SNAT --to-source 192.168.5.1 (固定ip)
或iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o eth0 -j MASQUERADE(用于拔号或动态分配的ip)
一条命令搞定
测试:
主机A:
#ping 192.168.5.86 OK
#elinks 192.168.5.86
This is a test website!
同时在主机C上
#tail -f /var/log/httpd/access_log
192.168.5.1 - - [16/Oct/2013:21:40:21 +0800] "GET / HTTP/1.1" 200 28 "-" "ELinks/0.12pre5 (textmode; Linux; 80x25-2)"
从http的访问日志中可以看出,主机A访问主机C时,源地址被转换成主机B的外网地址,即192.168.5.1
进一步测试,由于主机B的eth0和主机C是我的真实网段,可以访问外网,所以主机A这时即使是Vmware虚拟网段仅主机模式,也可以通过
主机B访问外网,测试如下:
配置主机A DNS为8.8.8.8
ping OK
说明主机A已经通过主机B的SNAT功能成功访问了外网!实验成功!