» » » Linux. Несколько сетевых маршрутов по умолчанию

Linux. Несколько сетевых маршрутов по умолчанию

Author: Tatyana dated 25-06-2017, 09:05
  • Dislike
  • 0
  • Like

Linux. Несколько сетевых маршрутов по умолчаниюНаличие нескольких сетевых интерфейсов (больше, чем одна сетевая карта) на ПК под Linux — само по себе не проблема. Но если несколько из них смотрят в Интернет, то маршрутизация по умолчанию заворачивает весь внешний трафик через тот интерфейс, который имеет более высокий приоритет. Если приоритет не указан, то при старте система выберет сетевой интерфейс по умолчанию и будет блокировать весь внешний трафик на всех остальных интерфейсах. Например, в Debian Stretch (Gnome, KDE) Network Manager вообще не даёт поднять более чем один интерфейс. Их можно переключать в один клик, но одновременно они работать не будут.

К счастью во всех современных дистрибутивах есть программа «iproute2». И скорее всего она уже установлена по умолчанию в вашем дистрибутиве.

Пример: В системе две сетевые карты и обе смотрят в Интернет, но подключены к разным провайдерам (роутерам, модемам, или что-то подобное). Нужно удалить Network Manager, отредактировать файл /etc/network/interfaces. В примере у нас два внешних интерфейса eth0 и eth1. Следует уточнить идентификаторы интерфейсов с помощью команды «ifconfig» (или в случае с Debian Stretch «ip a»). В выдаче видим что-то подобное:

2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 94:de:80:cc:1c:a3 brd ff:ff:ff:ff:ff:ff
    inet 10.20.1.15/24 brd 10.20.1.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::96de:80ff:fecc:1ca3/64 scope link 
       valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 64:66:b3:10:f4:90 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.15/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::6666:b3ff:fe10:f490/64 scope link 
       valid_lft forever preferred_lft forever


Исходя их этого приводим /etc/network/interfaces к следующему виду:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
 address 192.168.1.15
 netmask 255.255.255.0
 gateway 192.168.1.1
metric 20

auto eth1
iface eth1 inet static
 address 10.20.1.15
 netmask 255.255.255.0
 gateway 10.20.1.1
metric 10


Где «metric» указывает на приоритет интерфейсов. В моём примере eth1 имеет более высоки приоритет. Так что по умолчанию весь внешний трафик идёт через этот интерфейс.

В файле /etc/resolv.conf укажите адрес DNS-сервера. Пример:

nameserver 8.8.8.8
nameserver 8.8.4.4


Стоит обратить внимание на то, что Network Manager заполняет и переписывает этот файл на своё усмотрение. Так что перед правкой /etc/resolv.conf убедитесь, что Network Manager удалён и система была загружена без его участия. А так же в том ,что больше никакая программа не изменяет этот файл. Иначе изменения не сохранятся.

В моём примере мне нужно чтоб BitTorrent клиент соединятся с пирами через интерфейс eth0, который в моей конфигурации имеет более низкий приоритет. BitTorrent — всего лишь пример. Это может быть IPTV плеер или нечто подобное, где в настройках можно указать сетевой интерфейс принудительно. Но из-за маршрутизации по умолчанию трафик будет блокироваться на интерфейсе с более низким приоритетом.

Добавляем несколько строк в конфигурацию интерфейсов.

auto  eth0
iface eth0 inet static
 address 192.168.1.15
 netmask 255.255.255.0
 gateway 192.168.1.1
post-up ip route add 192.168.1.0/24 dev eth0 src 192.168.1.15 table rt2
post-up ip route add default via 192.168.1.1 dev eth0 table rt2
post-up ip rule add from 192.168.1.15/32 table rt2
post-up ip rule add to 192.168.1.15/32 table rt2
metric 20

auto eth1
iface eth1 inet static
 address 10.20.1.15
 netmask 255.255.255.0
 gateway 10.20.1.1
metric 10


Строки «post-up ip» - настройка маршрутизации. «rt2» - дополнительная таблица маршрутов. На неё указывает файл /etc/iproute2/rt_tables. Его следует отредактировать и в самый низ добавить строку «1 rt2». Должно получиться что-то подобное:

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
1 rt2


При такой конфигурации оба сетевых интерфейса будут подниматься при старте системы и передача внешнего трафика будет возможна через оба эти интерфейса.

Если по каким-то причинам вам не нужно чтоб подобная маршрутизация была постоянной, не добавляйте строки «post-up ip» в /etc/network/interfaces и используйте команду «ip route add» для того, чтоб установить эту маршрутизацию вручную. Пример:

ip rule add  route add 192.168.1.0/24 dev eth0 src 192.168.1.15 table rt2
ip rule add route add default via 192.168.1.1 dev eth0 table rt2
ip rule add rule add from 192.168.1.15/32 table rt2
ip rule add rule add to 192.168.1.15/32 table rt2


Проверить конфигурацию можно следующими командами:

ip route list table rt2
ip rule show


Выдача:

$ ip rule show
0:      from all lookup local 
32764:  from all to 192.168.1.15 lookup rt2 
32765:  from 192.168.1.15 lookup rt2 
32766:  from all lookup main 
32767:  from all lookup default 

$ ip route list table rt2
default via 192.168.1.1 dev eth0 
192.168.1.0/24 dev eth0 scope link src 192.168.1.15


Если видите что-то похожее, то всё работает. Команда «ip route» покажет все актвны маршруты.
___
Tatyana K.



Tags: Linux


 
  • Creative Commons Licence
  • Norton Safeweb
  • Powered by MariaDB
  • Powered by Debian
  • Website Uptime Monitoring By ServiceUptime.com
  • Yandex.Metrica