Вопрос по iptables, NAT (Вопрос по построению правил для проброса внешних клиентов за NAT)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Mascher
Сообщения: 9

Вопрос по iptables, NAT

Сообщение Mascher »

Здравствуйте, возникла небольшая проблема, но я очень сильно запутался пытаясь её решить :)
Есть задача, на компьютере(OS Linux Gentoo) подключеном к интернету с публичным IP адресом 82.118.94.14, на внутреннем интерфейсе dummy0 с IP 10.0.0.1 запущен сервер, который слушает на UDP порту 11235.
Сервер может работать только с приватными диапазонами IP адресов, тоесть с публичный IP адресов он отпинывает все попытки подключится. Необходимо создать правило для nat с помощью iptables, которое бы создавал как бы обратный nat для этого сервиса. Тоесть необходимо всех пользователей подключающихся по порту 11235 на адрес 82.118.94.14 прикидывать локальный адрес виртуального интерфейса dummy0 10.0.0.1 да еще и менять публичный IP адрес внешнего клиента на какой-нибудь приватный IP адрес, например на 10.0.0.1 ну или на любой другой из диапазона 10.0.0.1-254.

На данный момент я сделал правила для проброса порта внешнего интерфейса на порт на внутренний интерфейс:

Код: Выделить всё

iptables -t nat -A PREROUTING -p udp -i eth0 -d 82.118.94.14 --dport 11235 -j DNAT --to 10.0.0.1:11235


Далее я пытался заменить Source IP, но это правило не срабатывает:
я пробовал и так:

Код: Выделить всё

iptables -t nat -A POSTROUTING -p udp -j SNAT --to-source 10.0.0.1

и так:

Код: Выделить всё

iptables -t nat -A POSTROUTING -p udp -o eth0 -j SNAT --to-source 10.0.0.1


и так:

Код: Выделить всё

iptables -t nat -A POSTROUTING -p udp -o dummy -j SNAT --to-source 10.0.0.1


не получается :)
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вопрос по iptables, NAT

Сообщение sash-kan »

/proc/sys/net/ipv4/ip_forward
?
и проконтролировать, чтобы в netfilter-е цепочка forward пропускала эти пакеты.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Mascher
Сообщения: 9

Re: Вопрос по iptables, NAT

Сообщение Mascher »

sash-kan писал(а):
01.11.2008 23:43
/proc/sys/net/ipv4/ip_forward
?
и проконтролировать, чтобы в netfilter-е цепочка forward пропускала эти пакеты.


А причем тут форвард?

Код: Выделить всё

# sysctl -a | grep forward
error: permission denied on key 'net.ipv4.route.flush'
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.dummy0.forwarding = 1
net.ipv4.conf.dummy0.mc_forwarding = 0
net.ipv4.conf.dummy1.forwarding = 1
net.ipv4.conf.dummy1.mc_forwarding = 0
net.ipv4.ip_forward = 1


Пакеты нормально доходят до сервиса и обратно, то есть правило - iptables -t nat -A PREROUTING -p udp -i eth0 -d 82.118.94.14 --dport 11235 -j DNAT --to 10.0.0.1:11235 - работает нормально. У меня никак не получается замаскировать IP адрес входящего соединения, и подставить вместо него приватный IP адрес, я что что-то не понятно написал? Неужели никто не сможет помочь в решении проблемы? Я в шоке :mda:
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Вопрос по iptables, NAT

Сообщение KiWi »

Пакеты, адресованные локальным приложениям, POSTROUTING не проходят.
Спасибо сказали:
Mascher
Сообщения: 9

Re: Вопрос по iptables, NAT

Сообщение Mascher »

KiWi писал(а):
05.11.2008 07:49
Пакеты, адресованные локальным приложениям, POSTROUTING не проходят.

И как же с этим бороться? :)
Нужен какой-то другой тип интерфейса? Или нужно как-то по другому правила описать?
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Вопрос по iptables, NAT

Сообщение pelmen »

может быть это в таблице mangle -A postrouting делать -j snat --to-source 10.0.0.1 ? :wacko:
не, я не прав.
Спасибо сказали:
Аватара пользователя
Olden Gremlin
Сообщения: 365
Статус: RAP22-RIPE
ОС: Debian GNU/Linux Wheezy

Re: Вопрос по iptables, NAT

Сообщение Olden Gremlin »

Mascher писал(а):
05.11.2008 07:59
Сервер может работать только с приватными диапазонами IP адресов, тоесть с публичный IP адресов он отпинывает все попытки подключится.
KiWi писал(а):
05.11.2008 07:49
Пакеты, адресованные локальным приложениям, POSTROUTING не проходят.
И как же с этим бороться? :)
Нужен какой-то другой тип интерфейса? Или нужно как-то по другому правила описать?
Лучше попытаться ответить на вопрос, почему "может работать только с приватными диапазонами"?
Этот сервер под Ваши контролем? (Подозреваю, что да)
Если на шлюзе есть DNAT, а на хосте маршрут по-умолчанию отстроен на шлюз, плюс к этому на шлюзе внутренняя сеть SNAT'имится (или отдельно этот хост), то все должно работать.
А вот контроль кому и как можно/нельзя ломиться на этот хост возложить ответственность на шлюз, а не на сервис хоста.
Вот такая вот мысль...
«Когда у общества нет цветовой дифференциации штанов — то нет цели!»
nic-hdl: RAP22-RIPE
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Вопрос по iptables, NAT

Сообщение pelmen »

так ведь хост - и есть этот шлюз. Я так понял, что комп один (он и шлюз с внешним ip, он и комп с серверной этой прогой, которая работает только с внутренними ip), соответственно надо как-то сначала подменивать dst на 10.0.0.1 (его внутренний ip, смотрящий в локалку), а затем подменивать его src на 10.0.0.1 (как буд-то это с локалхоста коннект идет), а вот потом обратно все менять, чтоб ответ шел обратно на комп где-то в интернете.
Спасибо сказали:
Mascher
Сообщения: 9

Re: Вопрос по iptables, NAT

Сообщение Mascher »

pelmen писал(а):
05.11.2008 10:25
так ведь хост - и есть этот шлюз. Я так понял, что комп один (он и шлюз с внешним ip, он и комп с серверной этой прогой, которая работает только с внутренними ip), соответственно надо как-то сначала подменивать dst на 10.0.0.1 (его внутренний ip, смотрящий в локалку), а затем подменивать его src на 10.0.0.1 (как буд-то это с локалхоста коннект идет), а вот потом обратно все менять, чтоб ответ шел обратно на комп где-то в интернете.

Совершенно верно, и сервер и шлюз и хост все на одной машинке, как описано в первом моем сообщении тут.
Переделать так чтоб сервис начал принимать пакеты не из приватных сетей не возможно :) Это бинарник, его не перекомпилишь... есть еще вариант сделать еще проброс этого UDP порта с одного интерфейса на другой, но я не представляю, с помощью чего это можно реализовать на Gentoo.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вопрос по iptables, NAT

Сообщение sash-kan »

возможно, поможет: "Nat for local connections"
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Olden Gremlin
Сообщения: 365
Статус: RAP22-RIPE
ОС: Debian GNU/Linux Wheezy

Re: Вопрос по iptables, NAT

Сообщение Olden Gremlin »

vodnick писал(а):
05.11.2008 13:33
Вместо
iptables -t nat -A POSTROUTING -p udp -j SNAT --to-source 10.0.0.1
попробуйте
iptables -t nat -A OUTPUT -p udp -j SNAT --to-source 10.0.0.1
"Не-не-не-не-не, Девид Блейн..."
Это у Вас уже что-то из разряда уличной магии.
Почитайте мануалы к iptables. В таблице nat цепочке OUTPUT делать -j SNAT нельзя!
«Когда у общества нет цветовой дифференциации штанов — то нет цели!»
nic-hdl: RAP22-RIPE
Спасибо сказали:
Аватара пользователя
vodnick
Сообщения: 70
ОС: Ubuntu

Re: Вопрос по iptables, NAT

Сообщение vodnick »

Я наудачу, но, к сожалению, Вы правы :)
Изменить адрес места отправления действительно можно только в цепочке POSTROUTING действием SNAT.
Существует два выхода: либо заюзать еще одну машину и тогда Ваша задача сведется к классической про проброс портов, либо изменять адрес места отправления на клиентах (что почти наверняка Вас не устроит и сделает уязвимым для спуфинга). Других способов я ИМХО не вижу.
Спасибо сказали:
Mascher
Сообщения: 9

Re: Вопрос по iptables, NAT

Сообщение Mascher »

sash-kan писал(а):
05.11.2008 13:31
возможно, поможет: "Nat for local connections"

К сожалению не нашел такой опции у себя в конфиге ядра...
Искал IP_NF_NAT_LOCAL и NF_NAT_LOCAL, безрезультатно, ничего про LOCAL NAT конфиг ядра не знает :)
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: Вопрос по iptables, NAT

Сообщение skor »

А если воспользоваться каким-либо демоном для редиректа портов?
http://www.boutell.com/rinetd/
По идее, при перенаправлении в иточнике там должен будет быть локальный адрес....

PS: Можно с помощью netcat
http://www.datastronghold.com/archive/t3303.html

Код: Выделить всё

nc -l -p 80 | nc irc.target_server.com 6667 | nc -b -l -p 80
Спасибо сказали:
Mascher
Сообщения: 9

Re: Вопрос по iptables, NAT

Сообщение Mascher »

skor писал(а):
05.11.2008 16:13
А если воспользоваться каким-либо демоном для редиректа портов?
http://www.boutell.com/rinetd/
По идее, при перенаправлении в иточнике там должен будет быть локальный адрес....

PS: Можно с помощью netcat
http://www.datastronghold.com/archive/t3303.html

Код: Выделить всё

nc -l -p 80 | nc irc.target_server.com 6667 | nc -b -l -p 80


netcat не умеет работать с несколькими пользователями одновременно.
rinetd не умеет работат с udp.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Вопрос по iptables, NAT

Сообщение pelmen »

Короче, ставить тебе отдельную машину :)
хочешь дам? Стоит старье какое-то (по-моему даже работает, 400мгц вроде) выбрасывать влом.
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: Вопрос по iptables, NAT

Сообщение skor »

Mascher писал(а):
06.11.2008 07:28
netcat не умеет работать с несколькими пользователями одновременно.
rinetd не умеет работат с udp.
Oops! UDP не заметил... :wacko:
Спасибо сказали:
Mascher
Сообщения: 9

Re: Вопрос по iptables, NAT

Сообщение Mascher »

pelmen писал(а):
06.11.2008 11:08
Короче, ставить тебе отдельную машину :)
хочешь дам? Стоит старье какое-то (по-моему даже работает, 400мгц вроде) выбрасывать влом.

Второй сервер... пока что это не реально, хотелось бы решить проблему в пределах одной машинки, неужели в линуксах все так плохо? :) В FreeBSD данная проблема решается влёт, там нат нормально работает между локальными интерфейсами. Мне надо решить данную проблему на linux...
Нашел программулину, которая вроде как может пробрасывать udp порты, у меня она почему-то не заработала, в архиве приложен исходный код программы, я ее скомпилил и запустил, слушать она слушает на порту, а вот пробрасывать не хочет, да и сказать чтоб она слушала на определенном интерфейсе не получилось, а в программировании не очень... Может кто поможет немного доработать данную программу, чтоб она могла слушать на определённом IP адресе ну и чтоб выполняла свою работу, пробрасывала всех входящих клиентов на указанный IP и порт :)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Mascher
Сообщения: 9

Re: Вопрос по iptables, NAT

Сообщение Mascher »

починил я uproxy, все начало пробрасывать, однако проблемы проблему это не очень решило :)
Вопрос по поднятию обратного NAT-а на внутренних интерфейсах под ОС Linux Gentoo остается открытым.
Не срабатывают правила POSTROUTE на локальных интерфейсах системы.

Если кому интересно я там uproxy подредактировал немного теперь его можно биндить на любые интерфейсы.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вопрос по iptables, NAT

Сообщение sash-kan »

а как насчёт ethernet bridge? и, соответственно, ebtables.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Mascher
Сообщения: 9

Re: Вопрос по iptables, NAT

Сообщение Mascher »

sash-kan писал(а):
07.11.2008 18:58
а как насчёт ethernet bridge? и, соответственно, ebtables.

А причем здесь бридж? Каким образом с помощью бриджа я смогу сделать трансляцию адресов?
Спасибо сказали: