Назад | Перейти на главную страницу

ip порт переадресация iptables

Я построил кластер компьютеров, они находятся в локальной сети за другим компьютером, который служит маршрутизатором. Я хочу выполнить переадресацию с внешнего порта маршрутизатора на порт 22 на узле отправки в сети LAN.

Предлагаю упрощенную схему:

            MACHINE 1                        MACHINE 2
            --------------------     LAN     -------------------
WAN ------ [EXTERNAL PORT       ] --------- [INTERNAL PORT       ]
            --------------------             -------------------

Я проделывал эту процедуру несколько раз раньше, поэтому вот что я сделал:

sysctl -w net.ipv4.ip_forward=1

# For security precautions I do not provide the actual addresses and ports
export EXTERNAL_PORT=...
export INTERNAL_PORT=...
export INTERNAL_IP=...
export EXTERNAL_IP=...
export EXTERNAL_DEV=enp1s0f1
export INTERANL_DEV=enp1s0f0

export OPERATION=A

iptables -t nat -$OPERATION PREROUTING   -p tcp -m tcp   -d $EXTERNAL_IP   --dport $EXTERNAL_PORT                                 -j DNAT   --to-destination $INTERNAL_IP:$INTERNAL_PORT
iptables        -$OPERATION FORWARD      -p tcp -m state -d $INTERNAL_IP   --dport $INTERNAL_PORT --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -$OPERATION POSTROUTING  -p tcp -m tcp   -s $INTERNAL_IP   --sport $INTERNAL_PORT                                 -j SNAT   --to-source $EXTERNAL_IP

Код ошибки не сгенерирован. Команда iptables -L (-t нат) предоставил достоверные таблицы маршрутизации. Но по некоторым причинам всякий раз, когда я пытался подключиться к узлу отправки через внешний порт маршрутизатора В соединении отказано бывает. Что мне не хватает? Брандмауэр выключен.

На обеих машинах установлен Debian 10. При необходимости я предоставлю дополнительную информацию.

ИЗМЕНИТЬ 1

Когда я попытался получить доступ к внутренней машине через вперед, tcpdump команда:

tcpdump -lnnienp1s0f0 host $INTERNAL_IP and port $INTERNAL_PORT

Однако, когда я посмотрел на внешний интерфейс, не показал трафика:

tcpdump -lnnienp1s0f1 host $EXTERNAL_IP and port $EXTERNAL_PORT

Была замечена моя попытка входа в систему:

11:15:55.776025 IP <REMOTEIPANDPORT> > <LOCAL_IPANDPORT>: Flags [S], seq 2884744900, win 29200, options [mss 1380,sackOK,TS val 3014466815 ecr 0,nop,wscale 7], length 0
11:15:55.776218 IP <LOCAL_IPANDPORT> > <REMOTEIPANDPORT>: Flags [S.], seq 1614741316, ack 2884744901, win 28960, options [mss 1460,sackOK,TS val 1837145780 ecr 3014466815,nop,wscale 7], length 0
11:15:56.081390 IP <REMOTEIPANDPORT> > <LOCAL_IPANDPORT>: Flags [.], ack 1, win 229, options [nop,nop,TS val 3014467119 ecr 1837145780], length 0
11:15:56.088596 IP <LOCAL_IPANDPORT> > <REMOTEIPANDPORT>: Flags [P.], seq 1:42, ack 1, win 227, options [nop,nop,TS val 1837146093 ecr 3014467119], length 41: HTTP
11:15:56.088777 IP <REMOTEIPANDPORT> > <LOCAL_IPANDPORT>: Flags [R.], seq 1, ack 42, win 227, length 0

Я считаю это важным, потому что университет, в котором работают компьютеры, иногда блокирует некоторые адреса и порты.

Точнее firewall не выключен, он даже не установлен.

поскольку Машина 1 работают также как NAT, я предоставляю свою конфигурацию NAT (это, однако, работает нормально):

INTERNAL=enp1s0f0
EXTERNAL=enp1s0f1

iptables -t nat -A POSTROUTING -o $EXTERNAL -j MASQUERADE
iptables -A FORWARD -i $EXTERNAL -o $INTERNAL -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $INTERNAL -o $EXTERNAL -j ACCEPT

РЕДАКТИРОВАТЬ 2

Команда iptables-save| sed "s/$EXTERNAL_IP/EXTIP/g" возвращает:

# Generated by xtables-save v1.8.2 on Fri Nov 29 04:50:00 2019
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A PREROUTING -d EXTIP/32 -p tcp -m tcp --dport 27182 -j DNAT --to-destination 192.168.20.101:22
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -o enp1s0f1 -j MASQUERADE
-A POSTROUTING -o enp1s0f1 -j MASQUERADE
-A POSTROUTING -s 192.168.20.101/32 -p tcp -m tcp --sport 22 -j SNAT --to-source EXTIP
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Fri Nov 29 04:50:00 2019
# Generated by xtables-save v1.8.2 on Fri Nov 29 04:50:00 2019
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -i enp1s0f1 -o enp1s0f0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i enp1s0f0 -o enp1s0f1 -j ACCEPT
-A FORWARD -i enp1s0f1 -o enp1s0f0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i enp1s0f0 -o enp1s0f1 -j ACCEPT
-A FORWARD -d 192.168.20.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -d 192.168.20.101/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 22 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
COMMIT
# Completed on Fri Nov 29 04:50:00 2019