LINUX.ORG.RU
решено ФорумAdmin

[nat][iptables][routing] Интересная задачка

 , ,


0

1

Есть сервер с линуксом на борту. С eth0 10.34.34.2/30 смотрящим во внешнюю (будем приближенно называть ее «корпоративной») сеть и интернет; и eth1 10.34.8.1/25 смотрящим во внутреннюю сеть. На роутере «корпоративной» сети прописано, что моя сеть 10.34.8.0/25 доступна через 10.34.34.2. Админ «корпоративной» сети предлагает настроить у себя нат (для выпускания всего этого дела в инет) только для 10.34.8.0/25.

Натить надо только то, что выходит в инет. По остальной части «корпоративной» сети пакеты должны путешествовать с «родными» адресами.

Вопрос: как мне получить доступ к сети интернет с самого сервера с линуксом? Ведь пакеты, уходящие на корпоративный роутер с адреса 10.34.34.2 натиться в инет не будут. То есть, например, как-то «снатить» уходящие с самого сервера пакеты чтобы они уходили во вне с адресом отправителя из подсети 10.34.8.0/25 ?

ЗюЫю Есть и другое решение: нат у админа «корп.» сети настраивается для адреса 10.34.34.2 и я у себя сам начу при помощи

iptables -t nat -A PREROUTING -d $some_external_corporate_network -j MARK --set-xmark 0x1
iptables -t nat -A PREROUTING -d $yet_another_external_corporate_network -j MARK --set-xmark 0x1
iptables -t nat -A POSTROUTING -o eth0 -s 10.34.8.0/25 -m mark ! --mark 0x1 -j SNAT --to-source 10.34.34.2
только то, что не имеет отношения к «корпоративной» сети, то есть то, что идет в инет.

Ответ на: комментарий от guilder

Вопрос имеет отношение только к системе с 2 интерфейсами и устройству NATа линукса. Все остальные дела за пределами данного линуксошлюза интересовать не должны. Достаточно знать, что 1) где-то дальше по пути следования пакеты идущие с адресов 10.34.8.0/25 в инет натятся 2) подсеть 10.34.8.0/25 смаршрутизирована через 10.34.34.2

nixtrian
() автор топика
Ответ на: комментарий от nixtrian

Что-то как-то запутанно немного.
Попробую воспроизвести условия задачи своими словами:

На Вашем роутере два сетевых интерфейса:
eth0:10.34.34.2/30 - в корпоративную сеть
eth1:10.34.8.1/25 - в свою сеть.

При этом «провайдер» корпоративной сети знает про сеть 10.34.8.0/25 и умеет роутить пакеты на неё через 10.34.34.2/30 (eth0 на роутере)

Корпоративная сеть описывается как 10.0.0.0/8

Задача:
1) Необходимо, чтобы пакеты, идущие транзитом, проходили без изменений.
2) Необходимо, чтобы пакеты с роутера, идущие на корпоративную сеть (10.0.0.0/8), имели source address как 10.34.34.2
3) Необходимо, чтобы пакеты с роутера, идущие на любые адреса не из корпоративной сети, имели source address равный 10.34.8.1

Я правильно понял?

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

Собственно наиболее коротко мой вопрос может звучать так:

как подменить адрес исходящего пакета? ведь таблица nat с ее цепочкой POSTROUTING в которой есть цель SNAT действует только на транзитные пакеты.

nixtrian
() автор топика
Ответ на: комментарий от Slavaz

Хотя минуточку.. ман гласит, что target SNAT is only valid in the nat table, in the POSTROUTING chain.

да и dmesg говорит

x_tables: ip_tables: SNAT target: used from hooks OUTPUT, but only usable from POSTROUTING

nixtrian
() автор топика
Ответ на: комментарий от nixtrian

nixtrian> Хотя минуточку.. ман гласит, что target SNAT is only valid in the nat table, in the POSTROUTING chain.

              nat:
                  This table is consulted when a packet  that  creates  a  new
                  connection  is encountered.  It consists of three built-ins:
                  PREROUTING (for altering packets as soon as they  come  in),
                  OUTPUT  (for altering locally-generated packets before rout‐
                  ing), and POSTROUTING (for  altering  packets  as  they  are
                  about to go out).

sdio ★★★★★
()
Ответ на: комментарий от sdio

Спасибо. Насколько я правильно понял (хотя отнюдь не сразу), суть реплая в том, что POSTROUTING относится не только к транзитным пакетам. Так что можно в моем случае успешно использовать правило

iptables -t nat -A POSTROUTING -o eth0 -s 10.34.34.2 -j SNAT --to-source 10.34.8.1
nixtrian
() автор топика
Ответ на: комментарий от nixtrian

есть еще предположение, что можно решить это при помощи iproute2.

ip route add default dev eth0 src 10.34.8.1

Как думаете, а?

nixtrian
() автор топика
Ответ на: комментарий от nixtrian

да. конечно же via в том числе

ip route add default via 10.34.34.1 dev eth0 src 10.34.8.1

P.S. Проверил. Таким образом оно действительно работает.

nixtrian
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.