一、环境说明 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 www.baidu.com OK 说明主机A已经通过主机B的SNAT功能成功访问了外网!实验成功!