Як я можу маршрутизувати підмережу до іншого інтерфейсу за допомогою iproute2?


0

тому я намагаюся налаштувати маршрутизацію за допомогою iproute, щоб певна клієнтська підмережа могла отримати доступ до підключеної мережі з захищеним інтернетом на іншому інтерфейсі.

Сервер має чотири інтерфейси:

2: enp2s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether a0:36:9f:e6:7a:9e brd ff:ff:ff:ff:ff:ff
    inet 10.20.30.1/16 brd 10.20.255.255 scope global enp2s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::a236:9fff:fee6:7a9e/64 scope link 
       valid_lft forever preferred_lft forever
3: enp2s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether a0:36:9f:e6:7a:9f brd ff:ff:ff:ff:ff:ff
    inet 10.132.128.70/26 brd 10.132.128.127 scope global enp2s0f1
       valid_lft forever preferred_lft forever
    inet6 fe80::a236:9fff:fee6:7a9f/64 scope link 
       valid_lft forever preferred_lft forever
4: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:00:d1:ce brd ff:ff:ff:ff:ff:ff
    inet 10.132.128.71/26 brd 10.132.128.127 scope global eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::ae1f:6bff:fe00:d1ce/64 scope link 
       valid_lft forever preferred_lft forever
5: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:00:d1:cf brd ff:ff:ff:ff:ff:ff
    inet 172.16.10.1/21 brd 172.16.15.255 scope global eno2
       valid_lft forever preferred_lft forever
    inet6 fe80::ae1f:6bff:fe00:d1cf/64 scope link 
       valid_lft forever preferred_lft forever

Клієнти можуть підключитися до підмережі 10.20.0.0/16 та отримати IP-адресу через DHCP. Потім вони повинні мати доступ до Інтернету через інтерфейс enp2s0f1. Цей інтерфейс є підключеним до Інтернету каналом з шлюзом на 10.132.128.65. У мене немає контролю над брандмауером.

Правила та таблиці маршрутизації виглядають так:

місцева таблиця:

broadcast 10.20.0.0 dev enp2s0f0  proto kernel  scope link  src 10.20.30.1 
local 10.20.30.1 dev enp2s0f0  proto kernel  scope host  src 10.20.30.1 
broadcast 10.20.255.255 dev enp2s0f0  proto kernel  scope link  src 10.20.30.1 
broadcast 10.132.128.64 dev eno1  proto kernel  scope link  src 10.132.128.71 
broadcast 10.132.128.64 dev enp2s0f1  proto kernel  scope link  src 10.132.128.70 
local 10.132.128.70 dev enp2s0f1  proto kernel  scope host  src 10.132.128.70 
local 10.132.128.71 dev eno1  proto kernel  scope host  src 10.132.128.71 
broadcast 10.132.128.127 dev eno1  proto kernel  scope link  src 10.132.128.71 
broadcast 10.132.128.127 dev enp2s0f1  proto kernel  scope link  src 10.132.128.70 
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 172.16.0.0 dev tap0  proto kernel  scope link  src 172.16.0.66 
local 172.16.0.66 dev tap0  proto kernel  scope host  src 172.16.0.66 
broadcast 172.16.3.255 dev tap0  proto kernel  scope link  src 172.16.0.66 
broadcast 172.16.8.0 dev eno2  proto kernel  scope link  src 172.16.10.1 
local 172.16.10.1 dev eno2  proto kernel  scope host  src 172.16.10.1 
broadcast 172.16.15.255 dev eno2  proto kernel  scope link  src 172.16.10.1

основна таблиця:

10.20.0.0/16 dev enp2s0f0  scope link  src 10.20.30.1 
10.132.128.64/26 dev eno1  proto kernel  scope link  src 10.132.128.71 
10.132.128.64/26 dev enp2s0f1  proto kernel  scope link  src 10.132.128.70 
172.16.0.0/22 dev tap0  proto kernel  scope link  src 172.16.0.66 
172.16.8.0/21 dev eno2  proto kernel  scope link  src 172.16.10.1

таблиця за замовчуванням:

default via 10.132.128.65 dev eno1 onlink 

Я спробував налаштувати маршрут так:

echo 200 clients >> /etc/iproute2/rt_tables
ip rule add from 10.20.0.0/16 lookup clients
ip route add default via 10.132.128.70 dev enp2s0f1 table clients
ip route flush cache

але це не спрацювало. Тому я намагався змінити правило маршрутизації на

from 10.20.30.1 lookup clients
//and
from iif enp2s0f0 lookup clients

але я все одно ніколи не отримую з'єднання з інтерфейсом. Я тестую с

ping -I enp2s0f0 10.132.128.70

Оскільки правило здається нормальним, я спробував різні маршрути:

ip route add 10.20.0.0/16 dev enp2s0f0 table clients
ip route add 10.132.128.64/26 via 10.132.128.65 dev enp2s0f1 table clients
ip route add 10.132.128.64/26 via 10.20.30.1 dev enp2s0f1 table clients
ip route add default 10.20.0.0/16 via 10.132.128.65 dev enp2s0f1 table clients

Як ви могли здогадатися, в цей момент я просто плутаю себе. Якщо я правильно це зрозумів, він працює так:

ip route add {source_network} via {gateway} dev {output_device} table clients

Або я помилився? Інша справа, коли я роблю

ip route get 10.132.128.65 // where we want to end up

Результат -

10.132.128.65 dev eno1  src 10.132.128.71 
    cache 

Таким чином, маршрут у таблиці за замовчуванням, схоже, замінює правило для клієнтської таблиці ... але правило таблиці клієнта активне, оскільки зміни в таблиці клієнтів змінюють підключення для клієнтів у мережі 10.20.0.0/16.

Якщо якась іформація відсутня, я з радістю надам її.

Спасибі заздалегідь!

Відповіді:


0

Ваша наступна конфігурація здається нормальною:

echo 200 clients >> /etc/iproute2/rt_tables
ip rule add from 10.20.0.0/16 lookup clients
ip route add default via 10.132.128.70 dev enp2s0f1 table clients

Я припускаю, що ви тестуєте ping зі свого маршрутизатора, а не від свого клієнта. Тоді ваша команда ping ping -I enp2s0f0 10.132.128.70неправильна. Фактично 10.132.128.70 - це локальна адреса (адреса маршрутизатора). Після цього запити Icmp залишатимуться локальними і не визначатимуться ні enp2s0f1, ні eno1.

Натомість ви можете спробувати

ping -I enp2s0f0 10.132.128.65

Залежно від брандмауера, ви можете бачити чи не відповідати ping / icmp, але ви можете принаймні перевірити, чи передаються пакети через правильний інтерфейс (enp2s0f1). Щоб переконатися, що: ви можете використовувати tcpdump :

tcpdump -i enp2s0f1 ip host 10.132.128.65
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.