由于项目的需要, 用虚拟机实现的网络环境, 其中一台作为 bridge,所有的其他的机器,都通过bridge进行中转, 于是用linux 的Iptables nat 功能来实现。
网络拓朴如下 :
对于 bridge ,它有一个公网的IP,一个内网的IP,其他的机器都只有内网的IP,并将bridge的内网IP作为 网关来使用。
为了保证网络地址的确定, 首先用dhcp的方式来获得公网的IP,然后再用静态的方式进行设置 , 如何设置静态IP地址 请参考 Centos(1) 设置静态IP 如下:
目前bridge的跟帖情况如下:
然后设置其他的内网机器, 如下:
再测试一下网络的连通性,从内部访问外部的IP地址,是可以连通的
在bridge上设置 iptables 如下:
测试一下iptables是不是可以的,用iptables -t nat -L, 发现我们设定的到192.168.110.10的22端口是存在的。
这一步是最最关键的, 笔者当时就是没有设定好这一步, 造成从外面怎么访问 10.64.70.64的1022端口都 不行,说是connection failed.
就是在/etc/sysctrl.conf中设定net.ipv4.ip_forwarding,
至此, 用iptables来实现 上面的网络架构已经结束, 在这个过程中, 从网络上搜索到的许多的内容是没有办法使用的, 以此文为以后的查询作基础。
也希望对其他的人有用。
8/12 日添加
当我们设置好了nat之后, 我们可以测试他们的联通性,但是如果当不通时候,怎么来debug.
首先, 我们在/etc/sysconfig/iptables 中添加如下的内容。
-A PREROUTING -i eth0 -p tcp -j LOG --log-level warning --log-prefix "***nat-statu***"
重启iptables
service iptables restart
这样的话,每一个进来的tcp的信息,我们都用warning的方法来打印出来 。
其次, 设置 syslog
vim /etc/syslog.conf
#2添加如下的内容
kern.warning /var/log/iptables.log
重启syslog
然后可以 在/var/log/iptables.log中查看, 连接的信息
这样就可以实现 简单的debug.