Я реализую Пример толчка Ratchet на моем сервере (веб-сокеты) на порту 9090. Это текущие политики iptables:
[root@myserver ~]# iptables -L -n -v
Chain INPUT (policy ACCEPT 309 packets, 22420 bytes)
pkts bytes target prot opt in out source destination
6 380 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9090 flags:0x17/0x02
1765 79738 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 state NEW,ESTABLISHED
831 80329 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
37 2866 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
1657K 67M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
57 4891 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
1645K 99M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
763 44632 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
7 348 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:21
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 state NEW,RELATED,ESTABLISHED
6 384 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:1337
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:11211
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3204K packets, 162M bytes)
pkts bytes target prot opt in out source destination
1881 129K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:3306 state ESTABLISHED
По какой-то причине я не могу получить доступ к порту 9090 ни с клиента, ни через telnet.
Консоль браузера возвращает это:
WebSocket connection to 'ws://XX.XX.XX.XX:9090/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED autobahn.min.js:62
(XX.XX.XX.XX - IP моего сервера)
telnet localhost
возвращает это:
[root@myserver html]# telnet localhost 9090
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
Обновить
Я побежал ss -tnlp и вот результат:
[root@myserver ~]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 *:3306 *:* users:(("mysqld",1317,10))
LISTEN 0 128 :::11211 :::* users:(("memcached",1361,27))
LISTEN 0 128 *:11211 *:* users:(("memcached",1361,26))
LISTEN 0 128 :::80 :::* users:(("httpd",6378,4),("httpd",6381,4),("httpd",6382,4),("httpd",6383,4),("httpd",6384,4),("httpd",6385,4),("httpd",6386,4),("httpd",6387,4),("httpd",6388,4))
LISTEN 0 32 *:21 *:* users:(("vsftpd",1073,3))
LISTEN 0 128 :::22 :::* users:(("sshd",2661,4))
LISTEN 0 128 *:22 *:* users:(("sshd",2661,3))
LISTEN 0 100 ::1:25 :::* users:(("master",1442,13))
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",1442,12))
LISTEN 0 128 :::443 :::* users:(("httpd",6378,6),("httpd",6381,6),("httpd",6382,6),("httpd",6383,6),("httpd",6384,6),("httpd",6385,6),("httpd",6386,6),("httpd",6387,6),("httpd",6388,6))
Чтобы проверить, прослушивает ли процесс / использует ли сокет, попробуйте lsof -i:9090
.
Как сказал fukawi2, возможно, ваш процесс его не слушает. Или, может быть, есть другой, который мешает вашему использовать его.
Вы можете видеть из своего iptables -nvL
выведите, что ваше правило выполняется (6 совпадений в вашем выводе).
Ваш ss -tnlp
показывает, что нет процессов, привязанных к порту 9090 (Local Address:Port
столбец), поэтому приходящих пакетов до 9090 являются передача iptables, но ядро не имеет к ним никакого отношения (нет привязки к процессу), поэтому ядро отправляет обратно пакет TCP RST, что приводит к ошибке отказа в соединении.
Короче говоря, ваша проблема не в iptables, а в том, что ваш процесс либо не работает, либо не привязан к порту 9090 правильно / успешно.