LINUX.ORG.RU
ФорумAdmin

Iptables и две сети с одинаковой адресацией

 ,


0

1

Добрый день!

У меня есть две сети LAN1 и LAN2 с адресацией 10.0.0.0/24. Адресацию менять нельзя.

Есть Linix-машина, назовем ее COMPUTER, с двумя интерфейсами смотрящая в обе сети.

В LAN2 есть шлюз 10.0.0.254 для доступа к серверу SERVER по порту 8080

Задача: LAN1 должен получить доступ к SERVER:8080.

Решаема ли задача средствами iptables? Это должен быть «Overlapping NAT»?

Никак не могу уложить в голове как это правильно сделать.

Policy Based routing твой друг

Хотя да, тут всё равно DNAT нужен

sparks ★★★
()
Последнее исправление: sparks (всего исправлений: 1)

Можно. Сделать, например, виртуальный роутер через netns, и прогнать через него с натами (и матами), что бы сети не пересекались.

Oleg_Iu
()

Чтожж

COMPUTER.ETH0 -> LAN1 (10.0.0.0/24)

COMPUTER.ETH1 -> LAN2 (10.0.0.0/24)

Ты хочешь сроутить LAN1 для SERVER через 10.0.0.254 из LAN2

Решение нормальным не будет, но раз уж упарываться, то по полной, приступим:

  1. на хостах из LAN1 тебе надо будет добавть маршрут: SERVER.IP/32 via COMPUTER.ETH0.IP

  2. Окэ, теперь клиенты LAN1 знают куда идти, но всё ещё в рамках одного широковещательного домена, значит будут по ARP спрашивать MAC COMPUTER.ETH0 и слать пакеты с DST ADDR SERVER.IP в направлении COMPUTER.ETH0, значит нам надо расказать COMPUTER что с ними дальше делать, а конкретно перекинуть на другую сетевую и сроутить, для этого создадим правило - что для SERVER.IP пришедших ETH0 роутить в соответствии с отдельной таблицей таблицей

ip rule add to SERVER.IP iif ETH0 lookup someother_table

Ну и добавим собсно маршрут до SERVER

ip route add SERVER.IP/32 via 10.0.0.254 table someother_table

  1. Гуд, в ту сторону пакет ушел, теперь надо затолкать обратно, то что придёт в ответ, ибо придёт оно с DST IP из LAN1 на интерфейс LAN2, хмм, может NAT логичнее? Но нет, это для слабаков не умеющих получать от жизни удовольствие, мы просто завернём трафик пришедший от SERVER.IP на LAN2 обратно в LAN1

ip rule add from SERVER.IP iif ETH1 lookup yetanother_table_for_ETH0

  1. Profit

Вроде ничего не упустил

А вот и упустил, роутер 10.0.0.254 будет искать адресата из ответного пакета пришедшего с SERVER в LAN2, а нам надо чтобы он прилетел на COMPUTER.ETH1

Но, где наша не пропадала?

Прикрутим SNAT, как несложно догадаться по тексту правила для iptables, SNAT выполняется в цепочке POSTROUTING, значит пакет адрес которого мы будем подменять должен быть уже на нужном интерфейсе, шаги 1,2 оставляем без изменения

Шаг 3. Тупо снатим то что предназначается для SERVER через COMPUTER.ETH1

IPTABLES -t nat -A POSTROUTING -d SERVER.IP -j SNAT --to-source COMPUTER.ETH1.IP

Вот теперь уже точно Profit

sparks ★★★
()
Последнее исправление: sparks (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.