UBuntu Server设置路由器

PHP 林涛 10520℃ 0评论

引言:

最近安装了Ubuntu Server 10.04 ,想通过无线上网,网卡设置正常后却怎么也上不去,找了N多资料也无果,最后终于在一篇帖子上找到答案,原来要设置路由表,如下:

红字部分为设置生效的方法。

Linux作为路由器的好处是相比专业的路由器设备,费用节省很多,因为硬件通常都是使用旧电脑加上几块网卡,而Linux系统有很多免费的可以使用。并且由于可以自己定制,可以针对企业网络的情况指定灵活的网络管理规则。但是这种做法需要学习很多知识,往往令人生畏。本文总结了自己的个人经验,试图帮助更多的Linux爱好者。
我的设置路由器的方法主要用到了UBuntu设置网卡地址、route命令和iptables的相关知识。用eth0直接连接在Internet上,另外两个通过IP包转发的方式和其他子网通信并因此可以连接Internet。

设置网卡

首先给我的三块网卡分配不同的地址:(通过sudo身份编辑/etc/network/interfaces文件)文件内容如下:

File Edit Options Buffers Tools Help                                                                                                                         
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 58.246.17.2
netmask 255.255.255.248
network 58.246.17.0
broadcast 58.246.17.7
gateway 58.246.17.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 210.22.70.3
dns-search longday.com
# The sencond network interface
auto eth1
iface eth1 inet static
address 192.168.10.244
netmask 255.255.255.0
network 192.168.10.0
broadcast 192.168.10.255
gateway 192.168.10.244
#dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.10.244


编辑好上面的文件后,执行sudo /etc/init.d/networking restart 重启网络服务。
修改/etc/resolv.conf文件下的DNS为210.22.70.3,重启计算机。

设置路由

现在我们要通过route命令设置路由,使得:
1)所有发往58.246.17.0网段的数据包经过eth0网卡
2)所有发往192.168.10.0网段的数据包经过eth1网卡

route命令可以用来查看当前路由表的设置,route del用于删除某条路由设置,route add用于添加某条路由设置.最后设置好的路由表如下:
/etc/network # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
58.246.17.0     *               255.255.255.248 U     0      0        0 eth0
localnet        *               255.255.255.0   U     0      0        0 eth1
default         58.246.17.1     0.0.0.0         UG    100    0        0 eth0

下面是我们的设置命令,首先使用下面的命令删除掉eth1的default设置,因为它会干扰我们的服务器通过eth0连接外网
route del default dev eth1
注意每次网络服务重新启动的时候,default设置会被修改成我们不想要的。我后面会提供一个方法自动删除之。
route add default gw 58.246.17.1 dev eth0//这行命令默认会自动添加,不需要手动加

下面三条命令就是添加各个网卡的路由策略:
route add -net 58.246.17.0 netmask 255.255.255.248 dev eth0    
route add -net 192.168.10.0 netmask 255.255.255.0 dev eth1


(注意,同样的命令,将add换成del,就可以删除这些策略,-net参数指的是网段,所以最后一个十进制数一定是0)。



设置IP包转发

1)执行下面的命令,将 /proc/sys/net/ipv4/ip_forward内容修改为1 (你当然也可以使用其他的编辑程序修改)
echo 1 > /proc/sys/net/ipv4/ip_forward 

2) 编辑/etc/sysctl.conf文件,取消#net.ipv4.ip_forward = 1的注释符号

3)使用iptables命令让内网的数据包经过路由器发送的时候,源包地址修改为路由器的ip地址;外部数据包发送到路由器后,目的IP地址被路由器修改成内网的IP地址。
iptables -F 
iptables -P INPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE //在nat规则表中添加一个规则,该规则将所有外发的数据的源伪装成eth0接口的ip地址 
(注:这句效率较低,但是比较灵活,适用于动态IP地址上网的情况 )

nat规则表主要负责数据包的地址转换。它有三个规则链,其中:
PreRouting链负责修改包的目标地址,通常用于处理收到的包,
PostRouting链负责修改包的源地址,通常用于要发送出去的包,下面有个例子 
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT –to-source 58.246.17.2//这句好像还不能用,以后再解决 。

保存IPTables的设置

下面的命令可以将当前iptables的设置保存到指定文件中:

sudo sh -c "iptables-save > /etc/iptables.up.rules"

// 一定要开启防火墙 ufw status 然后才能保存

在/etc/network/interfaces文件中增加两行,可以使得系统重新启动之前,将当前防火墙设置保存下来,并在下次启动的时候将防火墙设置读取

pre-up iptables-restore < /etc/iptables.up.rules
post-down iptables-save > /etc/iptables.up.rules

注意,这两行命令需要加在

iface eth0 inet dhcp之后,或者如果dhcp为static,应该加在ip地址、子网掩码、网关设置之后,举例如下:
auto lo
iface lo inet loopback

iface eth0 inet static
address 192.168.10.67
netmask 255.255.255.0
gateway 192.168.10.244
pre-up iptables-restore < /etc/iptables.up.rules
post-down iptables-save > /etc/iptables.up.rules

auto eth0
然后,可以通过重新启动网络服务检查是否有效。

如需转载请注明: 转载自26点的博客

本文链接地址: UBuntu Server设置路由器

转载请注明:26点的博客 » UBuntu Server设置路由器

喜欢 (0)
发表我的评论
取消评论

表情