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

маршрутизация linux или наттинг с ip на интерфейсе обратной связи в качестве псевдонима

У меня есть

eth0:0 192.168.2.10 (for bgp network announce, no vlan, alias on eth0)
eth0.1 192.168.3.20 (for bgp session 1,vlan3 transport to bgp router)
eth0.2 192.168.4.30 (for bgp session 2,vlan4 transport to bgp router)

маршрут по умолчанию задается зеброй (192.168.3.1 или 192.168.4.1 - аварийное переключение)

когда внешний IP-адрес (192.168.1.100) пытается подключиться к 192.168.2.10 -> отвеченные пакеты проходят через 192.168.3.1 (где исходный IP-адрес для этого 192.168.3.20). Это работает правильно. Но я хочу, чтобы исходный адрес был 192.168.2.10. Основная проблема заключается в том, что asterisk работает на 192.168.2.10 и клиенты пытаются зарегистрировать sip из 192.168.1.100 -> ответы отправляются из 192.168.3.20, а пакеты удаляются на удаленной стороне.

Как это исправить / решить? или есть другой способ настройки интерфейсов? Основная идея - переключить маршрутизацию на 192.168.2.10, если одна из сессий bgp выходит из строя.

rp_filter=0 on all interfaces

Если я поставлю что-то вроде:

iptables -t nat -A POSTROUTING -d 192.168.1.0/24 -j SNAT --to-source 192.168.5.58

это тоже не работает.

Вся проблема в том, что звездочка в этой схеме стоит за нат. если я запускаю его на всех интерфейсах -> клиент sip подключается нормально к IP 192.168.4.30 и 192.168.3.20, но не к 192.168.2.10.

lo в Linux - это не то же самое, что loopback в Cisco.

Любой адрес, назначенный lo в Linux должен использоваться исключительно для того, чтобы машина отправляла трафик самому себе; ядро будет рассматривать любой пакет с исходным IP-адресом, который соответствует назначенному для lo, как марсианский и будет отброшен при входе - это жестко запрограммированное поведение. Ядро, кстати, также использует lo для отправки трафика самому себе для IP-адреса на любом другом интерфейсе (так, например, если eth0 имеет 10.0.0.1, и вы его пропингуете, tcpdump на lo покажет эхо-запрос и ответ)

Для эквивалента петлевому интерфейсу Cisco стилю используйте «фиктивный» модуль ядра - помните, что фиктивный модуль также действует как воронка для трафика, направляемого к нему (например, null0 на Cisco), поэтому любой адрес, который вы назначаете это должно быть / 32, поскольку очевидно, что для фиктивного интерфейса ничего не будет подключено.

Размещение адресов без обратной связи на lo интерфейс обязательно вызовет странности. Предлагаю прикрепить 192.168.2.10 к eth0 вместо.