LINUX.ORG.RU
ФорумAdmin

SNAT не изменяет адрес

 ,


0

1

Здравствуйте.

Есть сервер со смотрящим наружу IP адресом: 7.7.7.7 на eth0. И виртуальный 192.168.1.1 на tap0 (с помощью vde2 создал). На 192.168.1.1:2000 висит ssh демон.

Надо, чтобы при коннекте на 7.7.7.7:22 запрос шел на 192.168.1.1:2000, но при этом адрес клиента был 192.168.1.2 например.

iptables -t nat -A PREROUTING -p tcp -d 7.7.7.7 --dport 22 -j DNAT --to-destination 192.168.1.1:2000

Так все работает. Теперь пытаемся изменить исходящий IP адрес на несуществующий 192.168.1.2. Добавляем:

iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.1 --dport 2000 -j SNAT --to-source 192.168.1.2

Но адрес не меняется на 192.168.1.2 :( Подскажите, что я не так делаю?

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

Ну сходу можно сказать, что во втором правиле вместо -d --dport логичнее выглядят -s --sport (хотя толку от изменения все равно быть не должно).
У меня ощущение, что ты неправильно делаешь не то, что надо. Вряд ли тебя обрадует результат, когда ты начнешь делать то, что не надо, правильным способом.
Опиши задачу.

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

Да, уверен. По логам sshd в /var/log/auth.log

Может это из-за того, что адрес 192.168.1.2 несуществующий и tap0 тоже виртуальный? :) Я просто в iptables не очень силен, не могу сообразить из-за чего оно может не меняться...

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

user [internet] -> 7.7.7.7:22 --[192.168.1.2]--> 192.168.1.1:2000

То есть на 192.168.1.1 надо получать соединения, словно они пришли из этой же подсети.

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

Второе правило:

iptables -t nat -A INPUT -s <критерий_адреса_внешнего_клиента> -p tcp -d 192.168.1.1 --dport 2000 -j SNAT --to-source 192.168.1.2

Вроде так.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от Zapekankin

А ты картиночку глянь, она проясняет. В ФАКе, что человек выше привел, картиночка более мутная, а эта хорошая (ну а при желании можно и получше нагуглить).
http://linux-ip.net/nf/nfk-traversal.png
Теперь ты понимаешь, что в том месте, в которое ты пихаешь второе правило, оно сработать не может, а если даже поменять критерии и заставить его сработать, то получишь черт знает что - локальный адрес источника в пакете, улетающем в интернет.

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

Кстати, да, про INPUT и snat/dnat похоже на правду. :)

В mangle source тоже никак не изменить как я понимаю.

Теперь ты понимаешь, что в том месте, в которое ты пихаешь второе правило, оно сработать не может, а если даже поменять критерии и заставить его сработать, то получишь черт знает что - локальный адрес источника в пакете, улетающем в интернет.

Да, теперь более менее ясно... Но все равно мне как-то с первого взгляда трудно воспринять эту схему. И поэтому я теперь не представляю где же source менять.

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

А то!)
Ну ты тоже, наполовину. DNAT не работает, конечно.

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

Ну тогда ой. Тебе надо либо более новое ядро с иптаблесами тащить из бэкпортов или тестинга, либо фиг его знает. В существующем положении задача выглядит нерешаемой.

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

А у вас с новым iptables все работает? Клево, если да... Да, тогда посмотрю в сторону нового iptables. Спасибо вам всем.

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

Да, работает. Демон принимает интернетовского клиента за клиента из локалки, netstat показывает клиента из локалки. все красиво.
Не за что.

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