将linux设备配置为路由器
1. 选取设备的某一接口配置为WAN口
如下命令可将eth0.2接口配置为WAN口
iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth0.2 -j MASQUERADE
iptables有关知识可参加博文:iptables-朱双印博客
2. 为WAN口配置ip地址与网关
如果直接接入公网,则需要提前申请一个公网ip与网关,如果是接入上一级路由器,可使用dhcp-client为WAN口申请ip地址与网关等信息,命令行示例如下(可使用busybox的udhcpc程序):
udhcpc -i eth0.2
udhcpc (v1.19.4) started
Sending discover...
Sending select for 10.29.48.252...
Lease of 10.29.48.252 obtained, lease time 86400
*curr=subnet=255.0.0.0
*curr=router=10.0.0.1
*curr=dns=221.12.1.227
*curr=lease=86400
*curr=serverid=10.0.0.1
使用分配到的ip地址与网关配置WAN口ip与默认路由:
ifconfig eth0.2 10.29.48.252 netmask 255.0.0.0
route add default gw 10.0.0.1
3. 此时设备就可以ping通公网了
可以ping通公网与域名了
~ # ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=111 time=55.697 ms
64 bytes from 8.8.8.8: seq=1 ttl=111 time=52.540 ms
ping www.baidu.com
PING www.baidu.com (103.235.46.39): 56 data bytes
64 bytes from 103.235.46.39: seq=0 ttl=45 time=63.965 ms
64 bytes from 103.235.46.39: seq=1 ttl=45 time=77.097 ms
如果公网ip地址可以ping通但是域名无法ping通,需要检查下是否有设置dns服务器地址,dns地址在如下两个配置文件中,分别保存的是ipv4与ipv6的dns地址,一般情况下配置文件中默认的dns服务器都可以使用,如果配置文件中的dns服务器不通,可以尝试重新设置其他dns服务器地址(步骤3中分配的就可以)
~ # ls -l /etc/resolv*
lrwxrwxrwx 1 1048177 1048177 27 Oct 21 13:21 /etc/resolv.conf -> /mnt/mtd/Config/resolv.conf
lrwxrwxrwx 1 1048177 1048177 30 Oct 21 13:21 /etc/resolvip6.conf -> /mnt/mtd/Config/resolvip6.conf
~ # cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver ::
nameserver ::
4. 使能设备的路由转发功能
在步骤3及之前的操作只能保证设备自己可以上网,如果设备LAN口下接入的设备也想通过该设备上网(设备扮演路由转发的角色),则需要执行如下命令使能设备的路由转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
在此之后该设备与设备LAN口下挂接的设备就可以正常上网了(LAN口下接入设备的ip地址与路由、dns也需要正确配置,可以在LAN口启用dhcp-server动态分配,也可以由LAN口下的设备自行静态设置);
注意:LAN口下挂接的设备可以正常ping通WAN口之上接的设备,如公网上的服务器等,但是WAN口之上的设备不可直接ping通LAN口下的设备,这是路由器本身的特性,因为LAN口所属网络为局域网,想要在WAN口之上的设备ping通LAN下的设备,可以在设备上进行端口映射配置(如DMZ功能),这样就可以在公网(WAN之上)*问内网(LAN内部)里的服务器了。