У меня есть сервер под управлением Fedora 23. Когда я запускаю на нем простое серверное приложение (пример, приведенный здесь, только с измененным портом и IP-адресом), он открывает порт 3490 и прослушивает подключение клиента. Как только клиент подключается, он должен ответить и закончить. Однако клиентская программа при запуске на удаленной машине просто зависает бесконечно и никогда не подключается.
Вот вывод команды netstat -tuplen
на сервере во время работы программы на стороне сервера. Программа "./server" здесь.
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 581266095 139/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 0 581266893 178/sendmail: accep
tcp 0 0 0.0.0.0:3490 0.0.0.0:* LISTEN 0 1781896327 23696/./server
tcp6 0 0 :::22 :::* LISTEN 0 581266097 139/sshd
tcp6 0 0 :::3306 :::* LISTEN 27 1762178376 18622/mysqld
tcp6 0 0 :::80 :::* LISTEN 0 581266785 149/httpd
Когда я пытаюсь подключиться к порту во время работы программного обеспечения, я получаю Trying [server IP]...
до истечения времени ожидания. Когда я запускаю серверное и клиентское программное обеспечение на одной машине и просто подключаюсь локально через 127.0.0.1, они работают отлично.
Во время работы серверного программного обеспечения я выполнял сканирование с помощью nmap на своем удаленном компьютере, в частности, nmap -T4 -A -v [server IP]/3490
. Он получает ssh-порт "22", к которому я был подключен в то время, с третьей машины, но не с порта 3490 или любого другого порта. Трассировка маршрута от моего локального компьютера до сервера занимает 12 прыжков, если это на что-то влияет.
Перед запуском серверного приложения я запустил
/sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3490 -j ACCEPT
а потом
service iptables save
разрешить подключения к порту через брандмауэр. Однако, хотя это могло открыть порт на брандмауэре, оно не позволило соединиться программам клиента и сервера. Что я делаю неправильно? Что мне нужно изменить? Где я должен проверить, чтобы узнать больше о проблеме и приблизиться к ее решению?