Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: ivanatora в Nov 16, 2004, 15:46



Титла: Port redirect на локална машина
Публикувано от: ivanatora в Nov 16, 2004, 15:46
Жертвата е машина, която разделя домашната ми мрежа от интернет (SNAT). На таз машина пускам апаш. Искам от мрежата да се вижда една страница, а отвън - друга. За целта пускам две инстанции на апаша: една която слуша на порт 80, и друга на 8080. До тук всичко работи. с http://ip.here:8080/ се вижда второто копие с различните си настройки. Искам обаче това :8080 да не се пише.. демек всичко което пристига отвън и идва към порт 80, да се пренасочва към порт 8080.
Пробвах следните неща:
Примерен код

iptables -t nat -A PREROUTING -p tcp -d $IP --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp -d $IP --dport 80 -j DNAT --to $IP:8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 8080

(естествено, не наведнъж, едно след друго ;) )
eth0 ми е интерфейса, който гледа навън. $IP е адреса на машината, която мъча. Нищо от това не проработи, ако отвън се опитва да се отвори http://ip.here/ (без :8080) се отваря първото копие на апаша, което слуша на 80.
Къде може да бъркам?  ???


Титла: Port redirect на локална машина
Публикувано от: coldy в Nov 16, 2004, 18:00
Здравей, при мен нещата работят така.

Примерен код
iptables -A PREROUTING -t nat -p tcp -d 111.222.333.444 --dport 80 -j DNAT --to 123.123.123.123:80


Титла: Port redirect на локална машина
Публикувано от: ivanatora в Nov 16, 2004, 18:17
Същата работа е.


Титла: Port redirect на локална машина
Публикувано от: the_real_maniac в Nov 16, 2004, 20:00
Цитат (ivanatora @ Ноември 16 2004,16:46)
1.Жертвата е машина, която разделя домашната ми мрежа от интернет (SNAT). На таз машина пускам апаш.

2.Искам от мрежата да се вижда една страница, а отвън - друга. За целта пускам две инстанции на апаша: една която слуша на порт 80, и друга на 8080. До тук всичко работи.

3.с http://ip.here:8080/ се вижда второто копие с различните си настройки. Искам обаче това :8080 да не се пише.. демек всичко което пристига отвън и идва към порт 80, да се пренасочва към порт 8080.

4.eth0 ми е интерфейса, който гледа навън. $IP е адреса на машината, която мъча. .
Къде може да бъркам?  ???

1.Т.е рутера , който седи м/у твоята мрежа и интернет.
ОК

2. Всичко работи - проверил си  ?.
ОК

3.Т.е от вънка да виждат host:8080, а от вътре host:80
?/OK

4.
eth0 - INTERNET
$IP - РЕАЛНОТО ( ?! ) ip на рутера
?/ОК

----

1.

iptables -t nat -A PREROUTING -m tcp -p tcp -i eth0 -d ip.of.the.router --dport 80 -j REDIRECT --to-ports 8080



2.

Ако локалната ти мрежа ползва реалното ип за заявка към сайта, вместо локалното тогава правилата ще са 2.

iptables -t nat -A PREROUTING -m tcp -p tcp -i eth1 -d ip.of.the.router --dport 80 -j DNAT --to local.ip.of.therouter:80

Това е ...


Титла: Port redirect на локална машина
Публикувано от: в Nov 17, 2004, 09:58
Пък като ти писне да го мъчиш с iptables вземи прочети малко за <VirtualHost> директивата на Apache, може и да ти свърши работа.

П.П. Не отричам че може да се реши прблема и с iptables ама защо да намесваме ядрото в неща които и Apache може да прави.


Титла: Port redirect на локална машина
Публикувано от: ivanatora в Nov 17, 2004, 11:37
@the_real_maniac: 1,2,3,4 - ok. 2 е проверено. Всъщност приоритета при тази задача е идващите отвън връзки към порт 80 да се пренасочват към 8080 и нищо повече. Съжалявам, ако съм внесъл малко неразбория.. ама за вътрешната мрежа няма значение кое отваря. IPто е реално.
Ето как тествам:
Карам някой отвън да отвори http://$ip/ и http://$ip:8080/
Това което той вижда при първия случай е 403 - Forbiden, защото в conf-a на сървъра, слушащ на 80 има deny from all. Докато на другия, който е на 8080 има allow from all из директивите. При втория случай се вижда тестовата страница от DocumentRoot-a на втория (8080) сървър.
Какво очаквам: при отваряне на http://$ip/ да се отваря тази тестова страница.
И това решение не помогна. Вече се замислям дали проблема не идва от другаде..
Предпочитам да си играя с iptables вместо с виртуалните хостове.


Титла: Port redirect на локална машина
Публикувано от: vlad73 в Nov 17, 2004, 16:28
малко слабо вероятно ми се вижда, но провери дали можеш да отвориш http://localhost:8080/
естествено от потърпевшата машинка

нещо ми се върти в главата, че -j REDIRECT правеше заявката локална за порта към който се редиректва... ама, ей Богу, наистина не съм убеден в това, което пиша в момента, просто идея, кояти мислех след време да пробвам... иначе мисля, че именно
iptables -t nat -A PREROUTING -p tcp -d $IP --dport 80 -j REDIRECT --to-ports 8080
е верния ред за iptables... естествено ако няма някой друг преди него дето да влияе, защо не го промениш на

iptables -t nat -I PREROUTING 1 -p tcp -d $IP --dport 80 -j REDIRECT --to-ports 8080

за да си гарантираш, че няма да се намери някое правило-тарикат, дето да се габарка с теб :)

Успех!


Титла: Port redirect на локална машина
Публикувано от: Uvigii в Nov 17, 2004, 17:23
а този, дето отваря страницата ... "отвън"
натиска ли F5  като обезумял ?!


Титла: Port redirect на локална машина
Публикувано от: ivanatora в Nov 17, 2004, 19:53
Реших проблема :)
Въобще бях забравил че ADSL модема прави някакъв негов си nat и че всъщност адреса на интерфейса е 192.168.1.2  :D
Смених $ip на 192.168.1.2, пуснах го и тръгна.
Всъщност грешката си е моя де.. кой да предположи че доставчика ще направи такова нещо изведнъж :D До сега бях с $ip на интерфейса.