Автор Тема: Dnat s iptables  (Прочетена 2858 пъти)

gogo_hr

  • Напреднали
  • *****
  • Публикации: 14
    • Профил
Dnat s iptables
« -: Jun 11, 2006, 22:51 »
Здравейте!
Имам две машини - 192.168.0.66 и 192.168.0.21. Искам FTP заявките към 192.168.0.66 да се прехвърлят към 192.168.0.21. И двете машини са с по един интерфейс и са в една мрежа, но все пак реших да пробвам с DNAT на 192.168.0.66:
Примерен код
iptables -A FORWARD -i 192.168.0.66 -o eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A PREROUTING -t nat -p tcp -d 192.168.0.66 --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j DNAT --to 192.168.0.21:21

Не се получава нищо. При опит за telnet на 192.168.0.66:21 от същата машина, дава connection refused. А от външни машини (разбирайте 192.168.0.0/24) се забавя малко и се разкача (но не се свързва с 192.168.0.21).

Знам че нещо наистина не е наред, но вече пробвам над един час и не мога да го накарам да работи.

П.П.
Примерен код
root@ginger:~# cat /proc/sys/net/ipv4/ip_forward
1
root@ginger:~#




Активен

HeadPhoneS

  • Напреднали
  • *****
  • Публикации: 27
  • Distribution: Gentoo , Ubuntu
  • Window Manager: KDE , Gnome
    • Профил
Dnat s iptables
« Отговор #1 -: Jun 11, 2006, 23:15 »
на машината с айпи 192.168.0.66 пишеш:
Примерен код
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 21 -j DNAT --to 192.168.0.21:21

кажи после дали е станало ...
Активен

  • Гост
Dnat s iptables
« Отговор #2 -: Jun 11, 2006, 23:44 »
Този въпрос е разглеждан N+1 пъти тука, виж търсачката.
Ето ти един от отговорите:
http://www.linux-bg.org/cgi-bin....1;st=10
Активен

  • Гост
Dnat s iptables
« Отговор #3 -: Jun 11, 2006, 23:46 »
ПС:

И хора ... когато правите port-forwarding е необходимо да го правите както в права ( DNAT ), така и в обратна посока ( SNAT ).
Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Dnat s iptables
« Отговор #4 -: Jun 12, 2006, 00:07 »
Освен това ми се струва, че FTP не е най-подходящия протокол за пренасочване. Не е достатъчно да се пренасочи порт 21 за да може да се ползва реално FTP, т.к. това е само порта за команди на FTP, отделно при трансфер на данни (включително списък на съдържание на директория) се отварят високи портове, като от това дали сървъра работи в пасивен или активен режим зависи кой ще отваря връзките.
Активен

gogo_hr

  • Напреднали
  • *****
  • Публикации: 14
    • Профил
Dnat s iptables
« Отговор #5 -: Jun 12, 2006, 00:09 »
Съжалявам много за пускането на темата, просто бях почти убеден че съм единствения с такъв проблем. Сега обаче се получи друг фал - source ip-то се променя на 192.168.0.66. Има ли начин след като заявката се прехвърли от .66 на .21, source ip-то да не бъде .66, а това на клиента? Търсих информация по въпроса, видях подобен thread по листите на FreeBSD, но нямаше нито един отговор. Благодаря предварително!

П.П.
@Hapkoc - примерът който съм пуснал е простичък. В действителност се прехвърля port range.



Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Dnat s iptables
« Отговор #6 -: Jun 13, 2006, 09:59 »
Ако не правиш SNAT ми се струва, че няма причина адреса на източника да се променя. Звучи странно.
Активен

  • Гост
Dnat s iptables
« Отговор #7 -: Jun 13, 2006, 10:41 »
В такива случай е добре да пуснеш един tcpdump на фтп сървъра и да се замислиш какво се случва. Ей, много обичам да развивам сценарии аз  '<img'> Значи клиента (.5 да речем) се опитва да установи връзка със машината (.66) която го ДНАТ-ва към фтп сървъра (.21). Как преминава това?

TCP (.5 -> .66, SYN)
.66 DNAT-ва, адреса на получателя се променя на .21 и пакета се препраща (.5 -> .21, SYN)
.21 получава пакета и се опитва да установи връзка: (.21 -> .5, SYNACK)
.5 получава отговора, обаче отговорът идва от .21, а не от .66, следователно пакета-отговор или е сбъркан или не е за него => връзка не се установява.

Следователно очевидно на фтп сървъра (.21) се налага да се сложи едно правило за SNAT, така че адреса-източник да бъде .66, а не неговия.

Обаче, както вече се спомена, има други грозни моменти в цялата работа..данните преминават по други сокети, по UDP и на случайни портове. След добавяне на SNAT правилото ще се установи че се връзваш, но нито ls можеш да изпълниш, нито да теглиш файлове.

Трансфери биха били възможни само в ACTIVE режим, с PASV няма вариант. Идеята е да създадеш на фтп сървъра още едно SNAT правило, което да променя адреса-източник за всички UDP пакети със source port 20 (ftp-data) от .21 на .66. При това положение клиентът (.5) ще прати по контролния канал (tcp,21) номера на порта, на който сървъра трябва да се свърже, за да изпрати данните. Сорс порт-а при това положение винаги е 20 според протокола.

В пасивен режим, сървъра праща на клиента номер на порт на който да се върже да си издърпа данните. Тъй като това е случаен порт много трудно ще стане момента с ДНАТ-ването при .66

Та значи трябва да сложиш следните правила на фтп сървъра (.21):

iptables -t nat -A POSTROUTING -p tcp --sport 21-j SNAT --to-source 192.168.0.66:21
iptables -t nat -A POSTROUTING -p udp --sport 20 -j SNAT --to-source 192.168.0.66:21

На .66 ще трябва да се добави и това правило:
iptables -t nat -A PREROUTING -p udp --dport 20 -j DNAT --to-destination 192.168.0.21:20

Тези стъпки ако малоумната ми теория е вярна биха решили проблема стига да не указваш на фтп клиента да ползва passive mode.
Активен

  • Гост
Dnat s iptables
« Отговор #8 -: Jun 13, 2006, 10:45 »
Ужасно съжалявам, ся видях че ftp-data било върху tcp а не върху udp. Замени в правилата udp с tcp '<img'>
Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Dnat s iptables
« Отговор #9 -: Jun 13, 2006, 10:48 »
gat3way, що си мисля, че FTP работи по TCP и при трансфер на данни?

аха, ок. :)



Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
iptables DNAT -> port_forwarding
Настройка на програми
jmut 29 5188 Последна публикация Feb 22, 2005, 15:32
от
SNAT & DNAT
Настройка на програми
nocture 6 3073 Последна публикация May 28, 2005, 13:18
от Soulstealer
Snat и dnat през vpn
Хардуерни и софтуерни проблеми
muffty 16 4284 Последна публикация Jun 16, 2006, 14:02
от muffty
Iptables dnat проблем ?
Настройка на програми
ludmilbv 2 1849 Последна публикация Aug 25, 2008, 00:51
от triplek
DNS и DNAT
Настройка на програми
sstefanov 5 2009 Последна публикация Oct 26, 2010, 10:16
от sstefanov