Я настраиваю переадресацию портов на маршрутизаторе SonicWall NSA 220 для порта 22. Похоже, что маршрутизатор пересылает TCP-пакеты должным образом. Однако Wireshark, запущенный на сервере, показывает, что sshd моего сервера игнорирует эти запросы ssh-соединения и не отвечает: он даже не пытается отправить какие-либо пакеты обратно.
Я могу ssh напрямую на сервер через тот же интерфейс Ethernet (из другой системы в локальной сети) просто отлично. Не получают ответа только переадресованные пакеты со стороны WAN.
Похоже, что виновником может быть sshd: по какой-то причине он игнорирует перенаправленные пакеты.
На сервере работает RHEL 6. Межсетевой экран отключен.
Есть идеи, почему sshd игнорирует перенаправленные запросы на соединение? Или виноват роутер?
Ниже приводится вывод tcpdump (здесь я использую порт 30002, но он такой же, как порт 22). IP-адрес сервера 192.168.8.33.
08:52:12.350492 IP 192.168.1.32.52205 > 192.168.8.33.30002: Flags [S], seq 2460054041, win 14600, options [mss 1460,sackOK,TS val 453857378 ecr 0,nop,wscale 6], length 0
08:52:13.347513 IP 192.168.1.32.52205 > 192.168.8.33.30002: Flags [S], seq 2460054041, win 14600, options [mss 1460,sackOK,TS val 453857628 ecr 0,nop,wscale 6], length 0
08:52:15.351529 IP 192.168.1.32.52205 > 192.168.8.33.30002: Flags [S], seq 2460054041, win 14600, options [mss 1460,sackOK,TS val 453858129 ecr 0,nop,wscale 6], length 0
08:52:19.363565 IP 192.168.1.32.52205 > 192.168.8.33.30002: Flags [S], seq 2460054041, win 14600, options [mss 1460,sackOK,TS val 453859132 ecr 0,nop,wscale 6], length 0
Вот результат tcpdump, когда я использую ssh из локальной сети, и это успешно:
08:50:41.844945 IP 192.168.8.253.55442 > 192.168.8.33.30002: Flags [S], seq 2514711830, win 14600, options [mss 1460,sackOK,TS val 4294948065 ecr 0,nop,wscale 6], length 0
08:50:41.844983 IP 192.168.8.33.30002 > 192.168.8.253.55442: Flags [S.], seq 2291827547, ack 2514711831, win 14480, options [mss 1460,sackOK,TS val 6807100 ecr 4294948065,nop,wscale 7], length 0
08:50:41.845290 IP 192.168.8.253.55442 > 192.168.8.33.30002: Flags [.], ack 1, win 229, options [nop,nop,TS val 4294948065 ecr 6807100], length 0
etc....
Вот мой sshd_config на сервере:
sudo grep ^[^'#'] /etc/ssh/sshd_config
Port 22
Port 30002
Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
Subsystem sftp /usr/libexec/openssh/sftp-server
Вот iptables:
sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 5350 packets, 314K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2121 packets, 14M bytes)
pkts bytes target prot opt in out source destination
Наконец-то я заработал. Я забыл, что у моего сервера два сетевых интерфейса, и оба были подключены: один к локальной сети маршрутизатора, а другой к сети WAN.
Для пояснения: WAN маршрутизатора - 192.168.8. *. LAN маршрутизатора - 192.168.1. *. Сервер - 192.168.8.32, клиент - 192.168.1.33.
Когда я отключил сервер от WAN сети роутера, внезапно все заработало. Я думаю, что RHEL на сервере, должно быть, был сбит с толку двумя маршрутами к клиенту 192.168.1.33.