
Можно ли настроить Linux-сервер с iptables для этого?
PC (192.168.1.11) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router1 (192.168.0.1)
PC (192.168.1.12) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router1 (192.168.0.1)
PC (192.168.1.13) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router1 (192.168.0.1)
...
PC (192.168.1.21) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router2 (192.168.0.2)
PC (192.168.1.22) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router2 (192.168.0.2)
PC (192.168.1.23) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router2 (192.168.0.2)
...
PC (192.168.1.31) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router3 (192.168.0.3)
PC (192.168.1.32) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router3 (192.168.0.3)
PC (192.168.1.33) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router3 (192.168.0.3)
...
решение1
iptablesне является инструментом для маршрутизации. Хотя иногда его можно использовать для дополнения конфигурации маршрутизации путем маркировки пакетов, здесь это даже не нужно.
Что требуется, так этомаршрутизация на основе политик: использование чего-либо иного, чем просто адрес назначения, для выбора маршрута: исходный адрес.
Предполагая или утверждая, что:
- Linux-сервер будет называтьсясервер
- Все 9 ПК,сервери 3 маршрутизатора уже настроены в соответствии со схемой OP
- в частности, ПК не нуждаются в какой-либо специальной настройке. Им просто нужно иметьсерверкак шлюз по умолчанию.
- Все адреса в схеме OP используют /24CIDR/сетевая маска.
- сервериспользует:
- eth0с адресом 192.168.1.1/24
- eth1с адресом 192.168.0.100/24
- серверможет иметь или не иметь шлюз по умолчанию, это не имеет значения. Маршрутизация политик будет использовать свои собственные отдельные настройки для пересылаемого трафика, поэтому не полагается на шлюз по умолчанию основной таблицы маршрутизации, если таковой имеется.
Если это еще не сделано, то 3 маршрутизаторам понадобятся дополнительные маршруты для достижения 192.168.1.0/24 ссерверкак шлюз. То же самое потребуется для систем, чтобы достичь локальной сети 192.168.0.0/24. Если бы они работали под управлением Linux, это было бы сделано на 3 маршрутизаторах или любой другой системе с:
ip route add 192.168.1.0/24 via 192.168.0.100
РЕДАКТИРОВАТЬ: какспросил позже, если не разрешено перенастраивать другие системы в локальной сети 192.168.0.0/24,серверможно использовать NAT на сервере, чтобы скрыть существование 192.168.1.0/24 для этих систем, включая 3 маршрутизатора. Поскольку это делается вне фазы маршрутизации, это будет независимо от остальной конфигурации маршрутизации ниже.
Поэтому вместо того, чтобы делать это на маршрутизаторах (или любой другой системе), можно использоватьiptables MASQUERADE
цель насервер:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
Сейчас насервер, 3 альтернативные группы правил создаются для достижения трех дополнительных таблиц маршрутизации: по одной на выбранный маршрутизатор, с этим маршрутизатором в качестве шлюза по умолчанию. Верно, что может быть только один шлюз по умолчанию, но он один на таблицу маршрутизации.
Поскольку IP-адреса ПК не упорядочены по блокам, используются правила 3x3 (при правильном выравнивании IP-блоков 3 правил будет достаточно при наличии соответствующих CIDR/сетевых масок).
Описано вip rule(8)
:
В некоторых обстоятельствах мы хотим маршрутизировать пакеты по-разному в зависимости не только от адресов назначения, но и от других полей пакета: исходного адреса, протокола IP, портов транспортного протокола или даже полезной нагрузки пакета. Эта задача называется «политической маршрутизацией».
[...]
Каждое правило маршрутизации политики состоит из селектора и предиката действия.
В этом случае селектор выберет исходные адреса ПК, а действие будет заключаться в поиске дополнительных таблиц маршрутизации, тем самым переопределяя обычный поискосновнойтаблица для выбора выделенного шлюза.
Правила маршрутизации (которые можно было бы упростить до 3 правил, если бы IP-адреса ПК были выровнены в адекватные блоки):
ip rule add from 192.168.1.11 lookup 10
ip rule add from 192.168.1.12 lookup 10
ip rule add from 192.168.1.13 lookup 10
ip rule add from 192.168.1.21 lookup 20
ip rule add from 192.168.1.22 lookup 20
ip rule add from 192.168.1.23 lookup 20
ip rule add from 192.168.1.31 lookup 30
ip rule add from 192.168.1.32 lookup 30
ip rule add from 192.168.1.33 lookup 30
Описано вip route(8)
:
Таблицы маршрутов: Linux-2.x может упаковывать маршруты в несколько таблиц маршрутизации, идентифицируемых номером в диапазоне от 1 до 2^32-1 или по имени из файла /etc/iproute2/rt_tables По умолчанию все обычные маршруты вставляются в основную таблицу (ID 254), и ядро использует эту таблицу только при расчете маршрутов. [...]
Заполните дополнительные таблицы маршрутизации произвольными значениями 10 20 и 30. Каждая таблица маршрутизации будет обрабатывать один частичный вид маршрутизации, адекватный решаемой проблеме. Здесь речь идет о выборе другого шлюза.
ip route add default via 192.168.0.1 dev eth1 table 10
ip route add default via 192.168.0.2 dev eth1 table 20
ip route add default via 192.168.0.3 dev eth1 table 30
Если ПК необходимо получить доступ к другим системам в сети 192.168.0.0/24, следует добавить следующие маршруты локальной сети (чтобы избежать частичного обхода маршрутизаторов, что никогда не является хорошей идеей):
ip route add 192.168.0.0/24 dev eth1 table 10
ip route add 192.168.0.0/24 dev eth1 table 20
ip route add 192.168.0.0/24 dev eth1 table 30
Результат кота можно проверитьсерверс ip route get
:
root@server:~# ip route get from 192.168.1.11 iif eth0 to 8.8.8.8
8.8.8.8 from 192.168.1.11 via 192.168.0.1 dev eth1 table 10
cache iif eth0
root@server:~# ip route get from 192.168.1.21 iif eth0 to 8.8.8.8
8.8.8.8 from 192.168.1.21 via 192.168.0.2 dev eth1 table 20
cache iif eth0
root@server:~# ip route get from 192.168.1.31 iif eth0 to 8.8.8.8
8.8.8.8 from 192.168.1.31 via 192.168.0.3 dev eth1 table 30
cache iif eth0
Другие системы в локальной сети 192.168.1.0/24 следуютосновнойТаблица маршрутизации без маршрутизации на основе политик. Например, еслисерверне имеет маршрута по умолчанию восновнойтаблицу, а только два ее маршрута LAN, то ничего больше не будет маршрутизироваться за пределы 192.168.0.0/24 LAN:
root@server:~# ip route get from 192.168.1.41 iif eth0 to 8.8.8.8
RTNETLINK answers: Network is unreachable
Примечания
Три маршрутизатора могут быть, например, интернет-шлюзами, выполняющими NAT и выходящими в Интернет в дешевой конфигурации, используя каждый по одному отдельному публичному IP-адресу (возможно, используя отдельного интернет-провайдера), создавая три группы ПК, видимых в Интернете с тремя разными публичными IP-адресами.
Указанную выше настройку необходимо будет интегрировать с инструментом настройки сети.сервер. Существует множество таких инструментов в зависимости от дистрибутива, напримересливверхвниз,Сетевой менеджер,systemd-networkd,нетплани, вероятно, многие другие, каждый со своим собственным методом настройки. Также, безусловно, можно использовать скрипт с данными командами выше.