Не может передать локальный порт другому локальному порту

Попытка передать локальный порт другому локальному порту 7777-> 55555

# ufw disable
# iptables -t nat -A PREROUTING -p tcp -i enp58s0f1 --dport 7777 -j DNAT --to-destination 192.168.47.5:3000
# iptables -t nat -A POSTROUTING -o enp58s0f1 -j MASQUERADE
# iptables -A FORWARD -i enp58s0f1 -j ACCEPT

# curl -s -I 192.168.47.5:3000 | head -1
HTTP/1.1 302 Found

# curl 192.168.47.5:7777
curl: (7) Failed to connect to 192.168.47.5 port 7777: Connection refused

# cat /proc/sys/net/ipv4/ip_forward
1

# cat /proc/sys/net/ipv4/conf/enp58s0f1/forwarding
1

Я также попробовал перенаправление портов в ufw первым сбросом ufw правила и добавление следующего в начале/etc/ufw/before.rules

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 3000
COMMIT

Вот вывод iptables-сохранения

# iptables-save
# Generated by iptables-save v1.6.1
*mangle
:PREROUTING ACCEPT [4543:2482113]
:INPUT ACCEPT [4543:2482113]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4711:804006]
:POSTROUTING ACCEPT [4781:811782]
COMMIT
# Generated by iptables-save v1.6.1
*nat
:PREROUTING ACCEPT [85:23165]
:INPUT ACCEPT [85:23165]
:OUTPUT ACCEPT [183:37649]
:POSTROUTING ACCEPT [80:5380]
-A PREROUTING -i enp58s0f1 -p tcp -m tcp --dport 7777 -j DNAT --to-destination 192.168.47.5:3000
-A POSTROUTING -o enp58s0f1 -j MASQUERADE
COMMIT
# Generated by iptables-save v1.6.1
*filter
:INPUT ACCEPT [2058:1070158]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1937:450137]
-A FORWARD -i enp58s0f1 -j ACCEPT
COMMIT
1
задан 7 February 2020 в 23:54

1 ответ

Директива ПЕРЕНАПРАВЛЕНИЯ iptables является соответствующим методом для того же перенаправления портов машины:

sudo iptables -t nat -A PREROUTING -p tcp -d 192.168.47.5 --dport 7777 -j REDIRECT --to-port 3000

Как демонстрация и как проверить пример, я буду использовать компьютер в 192.168.111.122 и перенаправлять порт 7777 для портирования 22, где у меня есть слушание sshd. Таким образом (замечают, что я добавил спецификатор сетевого интерфейса):

sudo iptables -t nat -A PREROUTING -i enp3s0 -p tcp -d 192.168.111.122 --dport 7777 -j REDIRECT --to-port 22

Теперь, я использую другой компьютер в 192.168.111.1 для проверки его (примечание: не действительно попытка к telnet, просто проверив, может ли это соединиться):

doug@DOUG-64:~$ telnet 192.168.111.122 7777
Trying 192.168.111.122...
Connected to 192.168.111.122.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.1p1 Ubuntu-5

Invalid SSH identification string.
Connection closed by foreign host.
doug@DOUG-64:~$

Хорошо. это казалось хорошо. Попробуйте ssh:

doug@DOUG-64:~$ ssh -p 7777 192.168.111.122
doug@192.168.111.122's password:
Welcome to Ubuntu Focal Fossa (development branch) (GNU/Linux 5.5.0-rc6-stock x86_64)
... a bunch deleted ...
Last login: Fri Feb  7 15:32:45 2020 from 192.168.111.1
doug@s18:~$
doug@s18:~$ logout
Connection to 192.168.111.122 closed.
doug@DOUG-64:~$

И также проверьте связь на пакетном уровне, во время сессии, через tcpdump (или wireshark, если Вы предпочитаете), сессия на 192.168.111.122:

doug@s18:~/temp-git-git$ sudo tcpdump -n -nn -tttt -i enp3s0 port 7777
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes
2020-02-07 15:37:16.480311 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [S], seq 494277163, win 29200, options [mss 1460,sackOK,TS val 349415894 ecr 0,nop,wscale 7], length 0
2020-02-07 15:37:16.480329 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [S.], seq 2825406220, ack 494277164, win 65160, options [mss 1460,sackOK,TS val 2718854230 ecr 349415894,nop,wscale 7], length 0
2020-02-07 15:37:16.480600 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [.], ack 1, win 229, options [nop,nop,TS val 349415894 ecr 2718854230], length 0
2020-02-07 15:37:16.486525 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [P.], seq 1:33, ack 1, win 510, options [nop,nop,TS val 2718854236 ecr 349415894], length 32
2020-02-07 15:37:16.486668 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [.], ack 33, win 229, options [nop,nop,TS val 349415896 ecr 2718854236], length 0
2020-02-07 15:37:18.016165 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [P.], seq 1:3, ack 33, win 229, options [nop,nop,TS val 349416278 ecr 2718854236], length 2
2020-02-07 15:37:18.016175 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [.], ack 3, win 510, options [nop,nop,TS val 2718855766 ecr 349416278], length 0
2020-02-07 15:37:18.016262 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [P.], seq 33:67, ack 3, win 510, options [nop,nop,TS val 2718855766 ecr 349416278], length 34
2020-02-07 15:37:18.016408 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [FP.], seq 67:69, ack 3, win 510, options [nop,nop,TS val 2718855766 ecr 349416278], length 2
2020-02-07 15:37:18.016428 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [.], ack 67, win 229, options [nop,nop,TS val 349416278 ecr 2718855766], length 0
2020-02-07 15:37:18.016589 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [F.], seq 3, ack 70, win 229, options [nop,nop,TS val 349416278 ecr 2718855766], length 0
2020-02-07 15:37:18.016600 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [.], ack 4, win 510, options [nop,nop,TS val 2718855766 ecr 349416278], length 0
12 packets captured
12 packets received by filter
0 packets dropped by kernel

doug@s18:~/temp-git-git$ sudo iptables -t nat -v -x -n -L
Chain PREROUTING (policy ACCEPT 38 packets, 4409 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       4      240 REDIRECT   tcp  --  enp3s0 *       0.0.0.0/0            192.168.111.122      tcp dpt:7777 redir ports 22

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

Chain OUTPUT (policy ACCEPT 2 packets, 228 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 2 packets, 228 bytes)
    pkts      bytes target     prot opt in     out     source               destination
doug@s18:~/temp-git-git$

Счетчики пакетов очень полезны. Обратите внимание, что путь PREROUTING был бы только пересечен однажды для каждого подключения (я сделал его 4 раза, когда я выполнил вышеупомянутую команду).

Если Вы делаете ошибку и должны удалить Ваши правила и запуститься снова, сделать:

sudo iptables -t nat -F

очистить туземные правила таблицы. Этот ответ, возможно, должен был бы быть включен в больший набор правила iptables или контекст UFW.

Править: О, между прочим:

doug@s18:~/temp-git-git$ grep . /proc/sys/net/ipv4/conf/*/forwarding
/proc/sys/net/ipv4/conf/all/forwarding:0
/proc/sys/net/ipv4/conf/default/forwarding:0
/proc/sys/net/ipv4/conf/enp3s0/forwarding:0
/proc/sys/net/ipv4/conf/lo/forwarding:0
doug@s18:~/temp-git-git$ grep . /proc/sys/net/ipv4/ip_forward
0
2
ответ дан 20 February 2020 в 22:58

Другие вопросы по тегам:

Похожие вопросы: