This is an old revision of the document!
You have two or more network cards (interfaces) in one Linux system and each of these interfaces has its own default gateway. By default, you can only have one default gateway on a system.
We assume that we have two interfaces:
eth0 eth1
Two networks that should be used are:
192.168.1.0/24 10.10.0.0/24
whereby the first IP address in each respective network should be the gateway. Config files for these interfaces are in
/etc/sysconfing/network-scripts/ifcfg-eth0
and
ifcfg-eth1
and it looks like this:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=no IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME=eth0 UUID=7f164bfd-1ae4-4062-aadd-e2ea8bc0121e DEVICE=eth0 ONBOOT=yes IPADDR=192.168.1.5 PREFIX=24 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=1.1.1.1
# cat /etc/sysconfig/network-scripts/ifcfg-eth1 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none IPADDR=10.10.0.124 PREFIX=24 DNS1=8.8.8.8 DNS2=1.1.1.1 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=no NAME=eth1 UUID=9320b706-e68e-3610-9fec-9988316bd478 DEVICE=eth1 ONBOOT=yes GATEWAY=10.10.0.1 NETMASK=255.255.255.0 NM_CONTROLLED=yes
To use a second interface and address we need to add another routing table. To do this go to file:
# vim /etc/iproute2/rt_tables
and add at the end “1 rt2”:
# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 rt2
Now we need to add routing rules and routes:
# ip route add default via 10.10.0.1 dev eth1 table rt2 # ip rule add from 10.10.0.0/24 table rt2
You can check these changes with commands:
# ip route show table rt2 # ip rule show
CentOS: Start custom script automatically after network startup Find the ifup-post under /etc/sysconfig/network-scripts. This scipt is called right after any network interface is brought up online. In this script, you will find the following code snippet toward the end.
if [ -x /sbin/ifup-local ]; then /sbin/ifup-local ${DEVICE}
In the code snippet above, if ifup-local script exists in /sbin location, then script gets executed with an interface name in argument. Usually no such ecript like ifup-local exists so in order to run a startup script automatically after a network interface is up. Create an executable script called ifup-local in /sbin and put in there any command or script you wish to run.
Here is an example:
if [[ "$1" == "eth0" ]] then echo "this part will be executed right after eth0 is up." echo "so you can put any startup command for eth0 here" else #DO_NOTHING fi
when script is done, use command to get the script executable.
$ sudo chmod +x /sbin/ifup-local
[root@localhost ~]# cat /sbin/ifup-local #!/bin/sh #ip route add default via 10.5.23.254 dev eth1 table rt2; #ip rule add from 10.5.23.0/24 table rt2 ip route add 10.5.23.0/24 dev eth1 src 10.5.23.10 table rt2; ip route add default via 10.5.23.254 dev eth1 table rt2; ip rule add from 10.5.23.10/32 table rt2; ip rule add to 10.5.23.10/32 table rt2