LINUX.ORG.RU
ФорумAdmin

Проброс портов на шлюзе

 , ,


0

1

Здравствуйте!

Нужна помощь, не могу справится с пробросом портов. На виртуальную машину которая находится внутри сети нужно пустить трафик напрямую мимо squid и пробросить порт для доступа по ssh.

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.0.0/12 -o p4p1 -j MASQUERADE
-A PREROUTING -i p3p1 -p tcp --dport 80 -j REDIRECT --to-port 3128
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -s 192.168.8.10 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 172.16.0.0/12 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 172.16.0.0/12 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport XXXX -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Проброс портов пыталась сделать добавлением следующих строчек в секцию nat:

-A PREROUTING -p tcp -m tcp -d $EXT_IP --dport YYYYY -j DNAT --to-destination 172.16.8.10:XXXX
-A POSTROUTING -p tcp -m tcp -s 172.16.8.10 --sport XXXX -j SNAT --to-source $EXT_IP:YYYYY

Порты ssh на шлюзе и на виртуальной машине одинаковые.

# Перенаправить запросы к 5.5.5.13:80 на 1.1.0.219:80 (FlightAware FlightFeeder) | (-d, --dst, --destination) пункт назначения
$IPT -t nat -A PREROUTING --dst 5.5.5.13 -p TCP --dport 80 -j DNAT --to-destination 1.1.0.8

Всё что выше, я не разбирал, потому как вношу не так.

sin-ok
()
-A PREROUTING -p tcp -m tcp -d $EXT_IP --dport YYYYY -j DNAT --to-destination 172.16.8.10:XXXX


Верно, плюс

-A FORWARD -p tcp -d 172.16.8.10 -j ACCEPT
-A FORWARD -p tcp -s 172.16.8.10 -j ACCEPT

Только они должны быть выше
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

И не забыть включить форвардинг
echo 1 > /proc/sys/net/ipv4/ip_forward
а как фэншуйно это в вашем дистре делаеться найдете сами.

anc ★★★★★
()
Ответ на: комментарий от anc

Форвардинг я сделала изначально:

[root@80 aleksa]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
Aleksandra
() автор топика
Ответ на: комментарий от anc

Вот так не хочет работать.

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A POSTROUTING -s 172.16.0.0/12 -o p4p1 -j MASQUERADE
-A PREROUTING -i p3p1 -p tcp --dport 80 -j REDIRECT --to-port 3128

-A PREROUTING -p tcp -m tcp -d $EXT_IP --dport YYYYY -j DNAT --to-destination 172.16.8.10:XXXX
-A POSTROUTING -p tcp -m tcp -s 172.16.8.10 --sport XXXX -j SNAT --to-source $EXT_IP:YYYYY

COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -p tcp -d 172.16.8.10 -j ACCEPT
-A FORWARD -p tcp -s 172.16.8.10 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 172.16.0.0/12 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 172.16.0.0/12 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport XXXX -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Aleksandra
() автор топика
Ответ на: комментарий от Aleksandra

Сосредоточимся пока на форвардинге портов:

1. По-моему, SNAT в таком виде лишний (ответные пакеты на за-DNAT-ченное соединение и так перепишутся), впрочем, влиять-мешать он не должен, поэтому это ничего не объясняет.

2. А вот насчёт «не работает» — вы случайно не из внутренней сети пробуете доступ к $EXTIP? чтобы это работало, нужен дополнительный SNAT, но не такой как у вас. А вот *извне* к $EXTIP должно уже работать, если я ничего не упустил.

LeninGad
()
Ответ на: комментарий от Aleksandra

-A PREROUTING -p tcp -m tcp -d $EXT_IP --dport YYYYY -j DNAT --to-destination 172.16.8.10:XXXX

Чуть выше

-A POSTROUTING -p tcp -m tcp -s 172.16.8.10 --sport XXXX -j SNAT --to-source $EXT_IP:YYYYY

Возможно не надо, у вас и так стоит
-A POSTROUTING -s 172.16.0.0/12 -o p4p1 -j MASQUERADE

anc ★★★★★
()
Ответ на: комментарий от LeninGad

Для доступа к $EXTIP:YYYYY изнутри сети:

-t nat -A POSTROUTING -p tcp -m tcp -s 172.16.0.0/12 -d 172.16.8.10 --dport XXXX -j SNAT --to-source $EXT_IP (или $INT_IP, whatever, главное, локальный на вашем чудо-роутере)

LeninGad
()
Ответ на: комментарий от LeninGad

Я идиотка. Форвардинг портов заработал. У нас в сети два канала интернета и два шлюза. На виртуалке был прописан другой шлюз.

Сейчас вот такие правила:

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A POSTROUTING -s 172.16.0.0/12 -o p4p1 -j MASQUERADE
-A PREROUTING -i p3p1 -p tcp --dport 80 -j REDIRECT --to-port 3128

-A PREROUTING -p tcp -m tcp -d $EXT_IP --dport YYYYY -j DNAT --to-destination 172.16.8.10:XXXX

COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -p tcp -d 172.16.8.10 -j ACCEPT
-A FORWARD -p tcp -s 172.16.8.10 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 172.16.0.0/12 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 172.16.0.0/12 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport XXXX -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Теперь надо заставить обновлять пакеты на виртуалке 172.16.8.10 напрямую в обход прокси. Подскажите пожалуйста где у меня и что не так.

Aleksandra
() автор топика
Ответ на: комментарий от Aleksandra
-t nat -I PREROUTING -i p3p1 -p tcp --dport 80 -s 172.16.8.10 -j ACCEPT

-I в том смысле, что правило должно быть перед правилом для прокси (-jREDIRECT).

LeninGad
()
Ответ на: комментарий от LeninGad

Не поняла куда это правило вставлять, и еще получается

-A FORWARD -p tcp -d 172.16.8.10 -j ACCEPT
-A FORWARD -p tcp -s 172.16.8.10 -j ACCEPT

не нужно?

Aleksandra
() автор топика
Ответ на: комментарий от Aleksandra

Правило вставлять в таблицу nat, цепочку PREROUTING, перед редиректом на прокси. Например, просто выполнить

iptables -t nat -I PREROUTING -i p3p1 -p tcp --dport 80 -s 172.16.8.10 -j ACCEPT

Из-за -I оно встанет в нужное место, и тогда можно делать iptables-save.

-A FORWARD ... -jACCEPT

в таблице filter — нужны, иначе никакого «мимо прокси» и никакого проброса портов не будет.

LeninGad
()
Ответ на: комментарий от Aleksandra

Правило выше ставиться перед заворачиванием трафика в прокси. Если нет обращений к этому адресу из других подсетей то можно убрать. Может для тебя будет проще видеть правила командой iptables -nvL -t nat --line-numbers

avb
()
Ответ на: комментарий от LeninGad

Что-то не хочет работать с такими правилами.

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A POSTROUTING -s 172.16.0.0/12 -o p4p1 -j MASQUERADE
-I PREROUTING -i p3p1 -p tcp --dport 80 -s 172.16.8.10 -j ACCEPT
-A PREROUTING -i p3p1 -p tcp --dport 80 -j REDIRECT --to-port 3128

-A PREROUTING -p tcp -m tcp -d $EXT_IP --dport YYYYY -j DNAT --to-destination 172.16.8.10:XXXX

COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -p tcp -d 172.16.8.10 -j ACCEPT
-A FORWARD -p tcp -s 172.16.8.10 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 172.16.0.0/12 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 172.16.0.0/12 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport XXXX -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Aleksandra
() автор топика
Ответ на: комментарий от avb
[root@80 sysconfig]# iptables -nvL -t nat --line-numbers
Chain PREROUTING (policy ACCEPT 2 packets, 465 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     tcp  --  p3p1   *       172.16.8.10          0.0.0.0/0            tcp dpt:80
2        0     0 REDIRECT   tcp  --  p3p1   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 3128
3        0     0 DNAT       tcp  --  *      *       0.0.0.0/0            xx.xx.xxx.xxx        tcp dpt:YYYYY to:172.16.8.10:XXXX

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 1 packets, 152 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 1 packets, 152 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 MASQUERADE  all  --  *      p4p1    172.16.0.0/12        0.0.0.0/0
Aleksandra
() автор топика
Ответ на: комментарий от Aleksandra

У тебя обращение по 80 порту происходят, просто сейчас модно везде 443 порт использовать. Для проверки можно весь трафик разрешить с этого хоста, а потому уже урезать до порта.

avb
()
Ответ на: комментарий от Aleksandra
-A FORWARD -p tcp -d 172.16.8.10 -j ACCEPT
-A FORWARD -p tcp -s 172.16.8.10 -j ACCEPT

Пинг заработает, если такое же для -p icmp добавить (ну или из этих -p tcp убрать).

LeninGad
()
Ответ на: комментарий от LeninGad

Супер! Все работает. И еще последнее хотела спросить, если у меня на стойке с десяток виртуальных машин как эстетичнее сделать?

-A FORWARD -d 172.16.0.0/12 -j ACCEPT
-A FORWARD -s 172.16.0.0/12 -j ACCEPT

А вверху перечислять:

-I PREROUTING -i p3p1 -p tcp --dport 80 -s $INT_IP -j ACCEPT

Или есть еще варианты?

Aleksandra
() автор топика
Ответ на: комментарий от Aleksandra

Адреса виртуалок вразброс идут и на это нельзя повлиять? Если можно их собрать, скажем в 172.16.8.0/24, будет эстетичнее.

Есть ipset (тулза и match extension) для работы с «коллекциями адресов», но для редко меняющегося набора из десяти штук я бы не стал её задействовать.

LeninGad
()
Ответ на: комментарий от LeninGad

Адреса виртуалок вразброс идут и на это нельзя повлиять? Если можно их собрать, скажем в 172.16.8.0/24, будет эстетичнее.

Как раз в этой подсети.

Мужчины! Спасибо Вам всем большое за помощь. Тему можно пометить как решенную.

Aleksandra
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.