Настройка публичной и частной маршрутизации в Ubuntu

Настройка публичной и частной маршрутизации в Ubuntu

Я уже некоторое время ищу ответ на этот вопрос и не могу найти, поэтому решил спросить, прежде чем провести еще пару дней, бившись головой об стол.

У меня есть Ubuntu-бокс с двумя физическими интерфейсами и одним виртуальным интерфейсом.

  eno1 - 172.16.0.100
  eno2 - 172.16.0.101
eno1:0 - x.x.x.x

Что я хотел бы получить

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

    a. eno1 - для пакетов, предназначенных для частных сетей (несколько несмежных диапазонов 172.16.x.0) b. eno1:0 - для пакетов, предназначенных для всех остальных сетей

Текущая настройка

список правил ip

0:  from all lookup local 
32760:  from all to x.x.x.x lookup eno1:0 
32761:  from x.x.x.x lookup eno1:0 
32762:  from all to 172.16.0.101 lookup eno2 
32763:  from 172.16.0.101 lookup eno2 
32764:  from all to 172.16.0.100 lookup eno1 
32765:  from 172.16.0.100 lookup eno1 
32766:  from all lookup main 
32767:  from all lookup default

таблица списка маршрутов ip eno1:0

default via x.x.x.1 dev eno1 

таблица списка маршрутов ip eno1

default via 172.16.0.1 dev eno1 
172.16.0.0/24 dev eno1  scope link  src 172.16.0.100 

таблица списка маршрутов ip eno2

default via 172.16.0.1 dev eno2 
172.16.0.0/24 dev eno2  scope link  src 172.16.0.101

список маршрутов ip

default via 172.16.0.1 dev eno1 onlink 
x.x.x.0/23 dev eno1  proto kernel  scope link  src x.x.x.x 
172.16.0.0/24 dev eno2  proto kernel  scope link  src 172.16.0.101 
172.16.0.0/24 dev eno1  proto kernel  scope link  src 172.16.0.100

Значения sysctl для eno1 и eno2

arp_filter=1
arp_ignore=1
arp_announce=2

Проблемы

  1. Я могу время от времени добираться до eno1 и eno2 из диапазонов за пределами их подсетей, но до eno1:0 я вообще не могу дотянуться.
  2. С коробки я вообще не могу выйти в интернет (публичные IP-адреса).

решение1

Нашел — или, скорее, заново открыл — ответ...

Проблема в том, что Unix считает, что хост — это сетевая сущность, а не порт, что вызывает все виды проблем arp на многосетевых серверах. Так что, по сути, мне нужно было ограничить ответы arp на интерфейсе IP-адресами, связанными с этим интерфейсом, в противном случае Unix будет отвечать на ЛЮБОМ интерфейсе независимо от IP-адреса — что действительно сбивает с толку все остальные устройства в подсети.

Итак... Установлены arptables

sudo apt-get -y install arptables

Ограничить ответы на каждом интерфейсе IP-адресами на интерфейсе

sudo arptables -n -v --line-numbers -L
Chain INPUT (policy DROP 6011K packets, 168M bytes)
1 -j ACCEPT -i eno1 -o * -d x.x.x.x , pcnt=2496 -- bcnt=69888 
2 -j ACCEPT -i eno1 -o * -d 172.16.0.100 , pcnt=294 -- bcnt=8232 
3 -j ACCEPT -i eno2 -o * -d 172.16.0.101 , pcnt=294 -- bcnt=8232 

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
1 -j ACCEPT -i * -o eno1 -s x.x.x.x , pcnt=2503 -- bcnt=70084 
2 -j ACCEPT -i * -o eno1 -s 172.16.0.100 , pcnt=295 -- bcnt=8260 
3 -j ACCEPT -i * -o eno2 -s 172.16.0.101 , pcnt=294 -- bcnt=8232 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

И вуаля, все IP-адреса отвечают на своих правильных портах.

Мужик! Надеюсь, я больше этого не забуду!

Связанный контент