由路由器/防火墙设备为一个小型办公室或家庭网络提供基本的互联网连接正日益变得可以承受。但是当预算紧张时,你可能会认真地考虑修改现有的Linux服务器来做完成这项任务。
配置IP转发
要想要你的Linux服务器成为路由器,你必须启用包转发(packet forwarding)。简单说包转发就是让数据包通过Linux机器从一个网络传输到另一个网络。找到文件/etc/sysctl.conf中的Linux内核参数net.">ipv4.ip_forward,通过删除关于包转发相关行前的"#"来激活它。
Before:# Disables packet forwardingnet.ipv4.ip_forward=0After:# Enables packet forwardingnet.ipv4.ip_forward=1
只有你重新启动的时候包转发才会启用,那时Linux将在特殊的基于RAM内存的/proc文件系统的子目录中创建一个文件。如果要立即激活这个功能,你必须通过sysctl命令加上-p参数来强迫Linux读取code>/etc/sysctl.conf</code>文件。下面是如何操作的:
[root@bigboy tmp] sysctl -psysctl -pnet.ipv4.ip_forward = 1net.ipv4.conf.default.rp_filter = 1kernel.sysrq = 0kernel.core_uses_pid = 1[root@bigboy tmp]#
详情请参阅附录I以获得更多调整内核参数的信息,就调整内核参数。
配置ARP代理
如果服务器需要在同一个网络里把一个包传送到另一个设备上,它会在网络上发一个ARP(Address Resolution Protocol)请求来询问目的设备的MAC地址。
如果同一服务器需要把一个包传送到远程网络的另一个设备上,过程就不一样了。服务器首先查看路由表来寻找网络上的最佳路由器的IP地址,由它把包传送的目的地。服务器随后发送一个ARP请求来询问匹配路由器IP地址的MAC地址。然后通过路由器的MAC地址把包和远程服务器的IP地址发送给路由器。
如果在网络上没有合适的路由器,服务器会发送一个ARP请求来询问远程服务器的MAC地址。一些配置过的路由器可以回答这些关于远程网络的ARP请求,这个功能就叫做ARP代理。这种做法有一些缺点。其中一个最普遍的问题是在网络上的两个路由器都配置了ARP代理。在这种情况下,它们都可能会回答本地服务器关于远程网络MAC地址的ARP请求。如果其中一个路由器有远程服务器的不正确路由表记录,那么到远程服务器的传输就有偶尔丢失的风险。换句话说你失去了对路由的控制。
注意: 因为这个和其他一些原因,一般在路由器上配置ARP代理不是一个好的选择。比较好的做法是始终在服务器上配置一个缺省网关,而对缺省网关可能不知道的网络则使用通过其他路由器的单独路由记录。
有些类型的桥接模式防火墙,必须要ARP代理来正常运作。这些设备一般作为串行链的一部分,把一个局域网上的多个网络交换机连接在一起,用来保护局域网上的某一部分不受其他部分的流量的影响。这种防火墙一般不配置局域网中的IP地址,看起来就像一段智能的电缆在有选择的屏蔽数据包。
如果你需要启动Linux服务器上的ARP代理,/proc文件系统就再次发挥作用了。ARP代理是由/proc/sys/net/ipv4/conf/目录下的文件控制的。这个目录下有服务器中每块运转网卡的对应子目录。每个子目录下都有个proxy_arp文件。如各这个文件中的值是0,那么这个接口上的ARP代理就是被禁用的;如果这个值是1,那么就是启用的。
你可以使用附录II提到的/etc/sysctl.conf文件来激活或禁用ARP代理。下面是激活ARP代理的例子,首先是对所有接口的,其次是对eth0和wlan0接口的。
## File: /etc/sysctl.conf# # Enables Proxy ARP on all interfacesnet/ipv4/conf/all/proxy_arp = 1# Enables Proxy ARP on interfaces eth1 and wlan0net/ipv4/conf/eth1/proxy_arp = 1net/ipv4/conf/wlan0/proxy_arp = 1
你可以使用sysctl命令激活这些设置。
[root@bigboy tmp] sysctl -p