现在的linux内核就自带了转发功能,只需要配置就能使用,今天配置了一下,遇到很多意外的情况,有很多细节需要注意。

打算搭建的场景是:一共三台机器,A,B,C。从A eth1连接到B eth0,B eth1连接到C eth0。这样A到C的包会经过B,现在要使得B能够成为一个路由器。

首先是开启linux的转发功能#echo 1 > /proc/sys/net/ipv4/ip_forward。查看的时候可以输入#cat /proc/sys/net/ipv4/ip_forward,如果是1表示开启,如果是0表示关闭。

然后在A上面ifconfig eth1 219.243.40.35 netmask 255.255.255.0。B上面ifconfig eth0 219.243.40.40 netmask 255.255.255.0,ifconfig eth1 202.113.15.15 netmask 255.255.255.0。C上面ifconfig eth0 202.113.15.30 netmask 255.255.255.0。

然后是配置路由表,路由表有两种命令,一个是ip route,一个是route其实都无所谓。道理是一样的,在A上面,sudo ip route 219.243.40.0/24 via 219.243.40.35,这样,所有219.243.40.0/24子网的都会到从eth1口出去,然后sudo ip route 202.113.15.0/24 via 219.243.40.40表示所有202.113.15.0/24子网的都会从eth1口出去,网关是219.243.40.40,这个网关比较重要,刚开始的时候死活调试不对,就是由于网关没有设置好的缘故。使用route命令的话,就是route add –net 202.113.15.0/24 gw 219.243.40.40。

另外还有一个比较重要的东西就是子网掩码,在ifconfig的时候,如果你不指定子网掩码的话,默认的情况会变成255.255.255.255。这样的结果就是这个网卡所在的子网只有这一个网卡,所以最好设置好子网掩码,因为本来子网掩码就是ip地址的不可缺少的一部分,虽然我们通常都默认网络地址是24位,主机地址是8为,但是不使用命令告诉计算机,计算机永远都不知道。不设置好子网掩码的话,还可能出现其他各种各样的奇怪的错误。

使用同样的方法在B和C上面设置好路由表,特别特别是网关一定要清楚。不知道网关的可以使用route命令查看一下。等到配置好了之后,在A上面ping主机C就没有问题了,ping 202.113.15.30,就能够得到返回了。

折腾了很久,终于搞定了,明天接下来下面的加入管道的调试可以继续进行了。不要害怕折腾,出错越多,调试越多,对系统也就越熟悉。