Здравствуйте уважаемые.
ТАкой вопрос,
Есть обычный прокси на Linux c двумя иинтерфейсами
eth0 смотрим в интернет
eth1 в локальную сеть
_____________________
Задача при обращении к eth0 на порт 1111 попадать на компьютер в локальной сети с таким же портом.
В iptables написал так
-A PREROUTING -p tcp -s 195.X.X.X -d 194.X.X.X --dport 1111 -j DNAT --to-destination 192.168.X.X:1111
-A FORWARD -s 194.X.X.X -d 192.168.X.X -p tcp --dport 1111 -j ACCEPT
-A FORWARD -s 192.168.X.X -d 194.X.X.X -p tcp --dport 1111 -j ACCEPT
-A FORWARD -i eth0 -s 194.X.X.X -d 192.168.X.X -p tcp --dport 1111 -j ACCEPT
В итоге при попытке подключения ничего не происходит
Может где что еще нужно указать?
А вообще, попробуйте добавить в начало FORWARD --state RELATED,ESTABLISHED -jACCEPT, а остальные правила тут описанные выкинуть (кроме ДНАТА). Вдруг сработает?...
-A FORWARD -s 194.X.X.X -d 192.168.X.X -p tcp --dport 1111 -j ACCEPT
это зачем? О_о
-A FORWARD -s 192.168.X.X -d 194.X.X.X -p tcp --dport 1111 -j ACCEPT
а это?
-A FORWARD -i eth0 -s 194.X.X.X -d 192.168.X.X -p tcp --dport 1111 -j ACCEPT
Дубль :-) Да уж если на по и пошло, то почему в обратку тоже 1111 порт ? О_о
Вообще странно, для того чтобы работало достаточно только первого правила,
если политика forward не drop. Либо тогда уж укажи по-человечески.
-A FORWARD -s 195.X.X.X -d 192.168.X.X -p tcp --dport 1111 -j ACCEPT
^^^ ^^^^^^^
-A FORWARD -s 192.168.X.X -d 195.X.X.X -p tcp --sport 1111 -j ACCEPT
^^^^^^^ ^^^^^^^
Заголовок пакета правится ещё ДО попадания в цепочку FORWARD,
соответственно разрешать форвардить пакеты надо уже с исправленными dst IP.
нет не сработало,
попробовал поменять на sport
жизни не прибавилось
убрал строчки
FORWARD --state RELATED,ESTABLISHED -jACCEPT
и так есть
тоже не помогло.
Загвостка в том что по соседству стоит такая же машина, с теми же правилами в iptables и на ней работает
%)
Да форфардинг разрешен
ip_forward в единице стоит
да и с локалки внет машины номально бегают
_________________
Anoxemian
Опечатка там была строчки эти две такие же как ты написал за исключение что вовторой строчке написан был dport смена на sport не помогла
что касается порта 1111 это образно, я прокидываю 3389
Дамп выдал от что
16:41:02.982975 ip_откуда стучусь.59.33130 > Внешний_IP_сервера.3389: S 217251945:217251945(0) win 5840 <mss 1460,sackOK,timestamp 42899336 0,nop,wscale 0> (DF)
16:41:14.982622 ip_откуда стучусь.33130 > Внешний_IP_сервера.3389: S 217251945:217251945(0) win 5840 <mss 1460,sackOK,timestamp 42900536 0,nop,wscale 0> (DF)
16:41:38.986655 ip_откуда стучусь.33130 > Внешний_IP_сервера.3389: S 217251945:217251945(0) win 5840 <mss 1460,sackOK,timestamp 42902936 0,nop,wscale 0> (DF)
помоему пакет даже до внутренниго IP не дошел темболее до сервера в локальной сети или нет?
Вообще без интерфесов, чтоб показывал все что тварится.
Мне почему то кажется что где то должен включаться редирект
...
Учитывая что с такм конфигом другай пашина (со всеми теми же параметрами) работает нормально (на другом внешнем IP)
>Вообще без интерфесов, чтоб показывал все что тварится.
Ага, раскатал губы.
man tcpdump
-i Listen on interface. If unspecified, tcpdump searches the sys-
tem interface list for the lowest numbered, configured up
interface (excluding loopback). Ties are broken by choosing
the earliest match.
On Linux systems with 2.2 or later kernels, an interface argu-
ment of ''any'' can be used to capture packets from all inter-
faces. Note that captures on the ''any'' device will not be
done in promiscuous mode.
tcpdump: listening on eth0
предпологаю, что по какой то веской причине
ответы от сервера в нутренней не доходят до того который посылает запрос,
только вот не догоняю что где пропиисать.
DNAT меняет ТОЛЬКО IP получателя, IP отправителя остается НЕИЗМЕННЫМ !
Следовательно в FORWARD-е адрес 194.x.x.x не должен упоминаться (общаются только 195.x.x.x и 192.168.x.x):
-A FORWARD -s 195.X.X.X -d 192.168.X.X -p tcp --dport 1111 -j ACCEPT
-A FORWARD -s 192.168.X.X -d 195.X.X.X -p tcp --sport 1111 -j ACCEPT