Назад | Перейти на главную страницу

Настройка двойных интерфейсов для двух внешних IP-адресов в Ubuntu

Я пытаюсь подключить второе соединение ISP к моему серверу для наших SIP-телефонов.

eth0 по умолчанию включен сервис 25 МБ 192.168.1.x, Я настроил

eth1 чтобы новая услуга 6Мб была 10.10.1.x

Оба маршрутизатора настроены на pppoe с уникальными статическими IP-адресами, у меня есть отдельные коммутаторы и один сервер Ubuntu 14Lts с двумя портами Ethernet. По отдельности любой из них работает нормально, но с обоими я могу только ping -I eth[0|1] 8.8.8.8 -c 3 Однако на одном интерфейсе нет проблем с пингом каждого маршрутизатора.

Если кто-нибудь может помочь мне запустить и запустить Nic, а также использовать основной трафик по умолчанию через eth0 и просто Asterisk / Sip трафик через eth1 спасет мой день.

Некоторые информационные выходы:

# cat /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.100
gateway 192.168.1.1
netmask 255.255.255.0

auto eth1
iface eth1 inet static
address 10.10.1.101
#gateway 10.10.1.1
netmask 255.255.255.0

$ sudo route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         home.Home       0.0.0.0         UG    0      0        0 eth1
10.10.1.0       *               255.255.255.0   U     1      0        0 eth1
link-local      *               255.255.0.0     U     1000   0        0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0

$ sudo ifdown eth0 && sudo ifup eth0

RTNETLINK answers: No such process
RTNETLINK answers: File exists
Failed to bring up eth0.

$ sudo ifdown eth1 && sudo ifup eth1

ifdown: interface eth1 not configured
RTNETLINK answers: File exists
Failed to bring up eth1.

$ ifconfig

eth0      Link encap:Ethernet  HWaddr 00:25:90:11:c8:44  
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::225:90ff:fe11:c844/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2316517 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3877952 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1881181270 (1.8 GB)  TX bytes:5573716194 (5.5 GB)
          Interrupt:16 Memory:faee0000-faf00000 

eth1      Link encap:Ethernet  HWaddr 00:25:90:11:c8:45  
          inet addr:10.10.1.101  Bcast:10.10.1.255  Mask:255.255.255.0
          inet6 addr: fe80::225:90ff:fe11:c845/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:214622 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9763 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:13988405 (13.9 MB)  TX bytes:890576 (890.5 KB)
          Interrupt:16 Memory:fafe0000-fb000000 

======================Изменить 1:===========================

Спасибо Петру Жабину за инструкцию iproute2

apt-get install iproute2
echo "1 link2" >> /etc/iproute2/rt_tables
ip route add 10.10.1.0/24 dev eth1 src 10.10.1.101 table link2
ip route add default via 10.10.1.1 dev eth1 table link2
ip rule add from 10.10.1.101/32 table link2
ip rule add to 10.10.1.101/32 table link2

Как-то странно в первый раз, когда я попробовал sudo echo "1 link2" >> /etc/iproute2/rt_tables он ответил -bash: / etc / iproute2 / rt_tables: Permission denied, но я переключился на Root, чтобы избежать необходимости в sudo, и больше никаких жалоб не поступало.

======================Изменить 2:===========================

# ping -I 10.10.1.101 8.8.8.8 -c 3

PING 8.8.8.8 (8.8.8.8) from 10.10.1.101 : 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2014ms

======================Изменить 3:===========================

# ip rule show

0:      from all lookup local 
32764:  from all to 10.10.1.101 lookup link2 
32765:  from 10.10.1.101 lookup link2 
32766:  from all lookup main 
32767:  from all lookup default 

# ip route show

default via 192.168.1.1 dev eth0 
10.10.1.0/24 dev eth1  proto kernel  scope link  src 10.10.1.101 
169.254.0.0/16 dev eth1  scope link  metric 1000 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.100 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 

# ip route show table link2

default via 10.10.1.1 dev eth1 
10.10.1.0/24 dev eth1  scope link  src 10.10.1.101 

Отображение таблицы link2, как ни странно, было неудачным. Не понимаю, почему не всегда печатается. Хорошо, что пинг через IP работает, а вот eth1 - нет. Для завершения я также включаю полные выставочные таблицы

# ip route show table all

default via 10.10.1.1 dev eth1  table link2 
10.10.1.0/24 dev eth1  table link2  scope link  src 10.10.1.101 
default via 192.168.1.1 dev eth0 
10.10.1.0/24 dev eth1  proto kernel  scope link  src 10.10.1.101 
169.254.0.0/16 dev eth1  scope link  metric 1000 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.100 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 
broadcast 10.10.1.0 dev eth1  table local  proto kernel  scope link  src 10.10.1.101 
local 10.10.1.101 dev eth1  table local  proto kernel  scope host  src 10.10.1.101 
broadcast 10.10.1.255 dev eth1  table local  proto kernel  scope link  src 10.10.1.101 
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.1.0 dev eth0  table local  proto kernel  scope link  src 192.168.1.100 
local 192.168.1.100 dev eth0  table local  proto kernel  scope host  src 192.168.1.100 
broadcast 192.168.1.255 dev eth0  table local  proto kernel  scope link  src 192.168.1.100 
broadcast 192.168.122.0 dev virbr0  table local  proto kernel  scope link  src 192.168.122.1 
local 192.168.122.1 dev virbr0  table local  proto kernel  scope host  src 192.168.122.1 
broadcast 192.168.122.255 dev virbr0  table local  proto kernel  scope link  src 192.168.122.1 
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101
local ::1 dev lo  table local  proto none  metric 0 
local fe80::225:90ff:fe11:c844 dev lo  table local  proto none  metric 0 
local fe80::225:90ff:fe11:c845 dev lo  table local  proto none  metric 0 
ff00::/8 dev eth0  table local  metric 256 
ff00::/8 dev eth1  table local  metric 256 
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101

# ping -I eth1 8.8.8.8 -c 3

PING 8.8.8.8 (8.8.8.8) from 10.10.1.101 eth1: 56(84) bytes of data.
From 10.10.1.101 icmp_seq=1 Destination Host Unreachable
From 10.10.1.101 icmp_seq=2 Destination Host Unreachable
From 10.10.1.101 icmp_seq=3 Destination Host Unreachable

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2015ms
pipe 3

# ping -I 10.10.1.101 8.8.8.8 -c 3

PING 8.8.8.8 (8.8.8.8) from 10.10.1.101 : 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=60 time=29.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=60 time=29.3 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=60 time=28.8 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 28.804/29.192/29.433/0.310 ms

Для начала вам необходимо правильно настроить обратный путь для пакетов, входящих через эти шлюзы. Это означает, что если есть пакет, входящий через eth1, ответ также должен идти через eth1, а не через маршрут по умолчанию.

Чтобы он работал, вам нужен iproute2, который позволит вам иметь несколько таблиц маршрутизации и несколько шлюзов. Во-первых, у вас должно быть только один адрес шлюза настроен в сети / интерфейсах, предположим, что это сеть 192.168.1.100, и вы хотите, чтобы трафик с 10.10.1.101 проходил через eth1 через маршрутизатор 10.10.1.1.

Тогда все остальное будет таким (при необходимости добавьте sudo):

apt-get install iproute2
echo "1 link2" >> /etc/iproute2/rt_tables
ip route add 10.10.1.0/24 dev eth1 src 10.10.1.101 table link2
ip route add default via 10.10.1.1 dev eth1 table link2
ip rule add from 10.10.1.101/32 table link2
ip rule add to 10.10.1.101/32 table link2

Это заставит вас работать с вашим обратным трафиком, идущим к нужному маршрутизатору, и вы также сможете без проблем выполнить ping -I из обоих интерфейсов. Вышеупомянутое создает вторую таблицу маршрутизации (link2), устанавливает для нее маршрут и область действия по умолчанию и добавляет два правила для обработки входящего и исходящего трафика.

Если ваши телефоны будут подключаться к этому серверу извне, этого будет достаточно. Если они где-то внутри, прокомментируйте более подробную информацию о настройке внутренней сети.