我的服务器上有两个网卡,一张配置内网ip,一张是公网ip,现在想实现两张网卡走两个网关。


系统环境

eth0 172.16.200.11/24   网关172.16.200.1(默认网关)
eth1 158.247.117.2/24   网关158.247.117.1


# eth1的网络配置
[root@lb-01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="static"
IPADDR=158.247.117.2
NETMASK=255.255.255.0  # 这个要
NETWORK=158.247.117.0
ROUTER=158.247.117.1   # 这个要
ONBOOT="yes"
TYPE="Ethernet"
USERCTL="yes"
PEERDNS="yes"
IPV6INIT="no"
PERSISTENT_DHCLIENT="1"


# 写到rc.local;重启会自动加路由;rt_tables就是routing tables
[root@lb-01 ~]# cat /etc/rc.d/rc.local
#!/bin/bash
touch /var/lock/subsys/local
for interface_file in $(ls /etc/sysconfig/network-scripts/ifcfg-eth* | grep -v ifcfg-eth0) ;do
  . ${interface_file}
  prefix=$(ipcalc -p ${IPADDR} ${NETMASK} | awk -F= '{print $2}')
  tablenum=$(echo ${DEVICE} | sed 's/eth//g')
  if [ ${ONBOOT} != 'yes' ] ;then
    continue
  fi
  if ! grep "^${tablenum} ${DEVICE}$" /etc/iproute2/rt_tables >/dev/null ;then
    echo "${tablenum} ${DEVICE}" >>/etc/iproute2/rt_tables
  fi
  ip route add ${NETWORK}/${prefix} dev ${DEVICE} src ${IPADDR} table ${DEVICE}
  ip route add default via ${ROUTER} dev ${DEVICE} table ${DEVICE}
  ip rule add from ${IPADDR}/32 table ${DEVICE}
  ip rule add to ${IPADDR}/32 table ${DEVICE}
done


[root@lb-01 ~]# chmod +x /etc/rc.d/rc.local  # 赋予执行权限
[root@lb-01 ~]# bash /etc/rc.d/rc.local   # 手动运行


# 查看路由,有两条default就对了
[root@lb-01 ~]# ip route show table all  | grep default
default via 158.247.117.1 dev eth1  table eth1
default via 172.16.200.1 dev eth0


参考链接

http://brainscraps.wikia.com/wiki/Setup_Gateway_Routing_On_Multiple_Network_Interfaces