поэтому я пытаюсь настроить маршрутизацию с помощью 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.

Если какая-то информация отсутствует, я с удовольствием предоставлю ее.

Заранее спасибо!

1 ответ1

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 -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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .