ifupdown-multi integrates support for multiple default gateways on independent
network connections into the Debian ifupdown network interface configuration
system. It adds new multi_* options to the /etc/network/interfaces file
format in order to more easily configure Linux's policy based routing.
The policy information used to configure each network interface using
ifupdown-multi is saved when ifup is run. This allows network interfaces
using ifupdown-multi to be brought up or down cleanly as needed.
The ifupdown-multi Debian package should be used if possible.
Manual installation can be accomplished by running the following commands:
# install -m 0755 ifupdown-multi.py /usr/local/lib/ifupdown-multi.py
# ln -sf /usr/local/lib/ifupdown-multi.py /etc/network/if-up.d/ifupdown-multi
# ln -sf /usr/local/lib/ifupdown-multi.py /etc/network/if-down.d/ifupdown-multi
ifupdown-multi is implemented in Python and requires the Python runtime to be
installed on the system and available during boot.
See the ifupdown-multi-interfaces(5) manpage for details.
The following example shows a basic configuration with two network interfaces attached to two Internet providers.
auto eth0
iface eth0 inet static
address 198.51.100.123
netmask 255.255.255.0
multi_table 1
multi_gateway 198.51.100.1
auto eth1
iface eth1 inet static
address 203.0.113.234
netmask 255.255.255.0
multi_table 2
multi_gateway 203.0.113.1
-
Do not specify a prefix in
multi_gateway_preferred_prefixesthat overlaps one of the subnets directly attached to the host. -
IPv6 is supported, but it is implemented in a slightly different way than IPv4. The
multi_gateway_weightoption is not supported for IPv6 gateways. The first IPv6 gateway configured is used instead, unless a specific prefix is configured to use a particular gateway using themulti_gateway_prefixesoption. -
ifupdisables stateless address autoconfiguration when thestaticmethod is used with theinet6address family, however it does not disable the learning of routes from IPv6 router advertisements. It is recommended to place an executable script in the/etc/network/if-pre-up.ddirectory containing something like the following contents:
#!/bin/sh
if test "$IFACE" = "--all"; then
exit 0
fi
if test "$METHOD" != "static"; then
exit 0
fi
IFACE="$(echo $IFACE | cut -f1 -d:)"
echo 0 > /proc/sys/net/ipv6/conf/$IFACE/autoconf
echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_dad
echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra
echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra_defrtr
echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra_pinfo
echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra_rtr_pref
echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_redirects
echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_source_route
echo 0 > /proc/sys/net/ipv6/conf/$IFACE/dad_transmits