Титла: Dnat s iptables Публикувано от: gogo_hr в 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:
Не се получава нищо. При опит за telnet на 192.168.0.66:21 от същата машина, дава connection refused. А от външни машини (разбирайте 192.168.0.0/24) се забавя малко и се разкача (но не се свързва с 192.168.0.21). Знам че нещо наистина не е наред, но вече пробвам над един час и не мога да го накарам да работи. П.П.
Титла: Dnat s iptables Публикувано от: HeadPhoneS в Jun 11, 2006, 23:15 на машината с айпи 192.168.0.66 пишеш:
кажи после дали е станало ... Титла: Dnat s iptables Публикувано от: в Jun 11, 2006, 23:44 Този въпрос е разглеждан N+1 пъти тука, виж търсачката.
Ето ти един от отговорите: http://www.linux-bg.org/cgi-bin....1;st=10 Титла: Dnat s iptables Публикувано от: в Jun 11, 2006, 23:46 ПС:
И хора ... когато правите port-forwarding е необходимо да го правите както в права ( DNAT ), така и в обратна посока ( SNAT ). Титла: Dnat s iptables Публикувано от: Hapkoc в Jun 12, 2006, 00:07 Освен това ми се струва, че FTP не е най-подходящия протокол за пренасочване. Не е достатъчно да се пренасочи порт 21 за да може да се ползва реално FTP, т.к. това е само порта за команди на FTP, отделно при трансфер на данни (включително списък на съдържание на директория) се отварят високи портове, като от това дали сървъра работи в пасивен или активен режим зависи кой ще отваря връзките.
Титла: Dnat s iptables Публикувано от: gogo_hr в Jun 12, 2006, 00:09 Съжалявам много за пускането на темата, просто бях почти убеден че съм единствения с такъв проблем. Сега обаче се получи друг фал - source ip-то се променя на 192.168.0.66. Има ли начин след като заявката се прехвърли от .66 на .21, source ip-то да не бъде .66, а това на клиента? Търсих информация по въпроса, видях подобен thread по листите на FreeBSD, но нямаше нито един отговор. Благодаря предварително!
П.П. @Hapkoc - примерът който съм пуснал е простичък. В действителност се прехвърля port range. Титла: Dnat s iptables Публикувано от: Hapkoc в Jun 13, 2006, 09:59 Ако не правиш SNAT ми се струва, че няма причина адреса на източника да се променя. Звучи странно.
Титла: Dnat s iptables Публикувано от: в Jun 13, 2006, 10:41 В такива случай е добре да пуснеш един tcpdump на фтп сървъра и да се замислиш какво се случва. Ей, много обичам да развивам сценарии аз
![]() 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 Публикувано от: в Jun 13, 2006, 10:45 Ужасно съжалявам, ся видях че ftp-data било върху tcp а не върху udp. Замени в правилата udp с tcp
![]() Титла: Dnat s iptables Публикувано от: Hapkoc в Jun 13, 2006, 10:48 gat3way, що си мисля, че FTP работи по TCP и при трансфер на данни?
аха, ок. :) |