Я запустил TCP-сервер на хосте A, а затем запустил TCP-клиент на другом хосте B.
Оба хоста находятся в одной локальной сети через беспроводной маршрутизатор дома. Клиент TCP пытается подключиться к серверу TCP через порт 8000. Но попытка не удалась из-за ошибки «Нет маршрута к хосту».
Я могу успешно выполнить ping на хост сервера с хоста клиента, и на самом деле теперь я подключен к серверу по ssh с клиента.
Если я поменяю местами два хоста, а именно запущу TCP-сервер на хосте B, а затем запущу TCP-клиент на хосте A, то TCP-соединение будет успешным.
Что не так с сервером хоста A? По следующей ссылке показаны результаты iptables -L -n, ss -tlnp и netstat -lnp
http://paste.ubuntu.com/12785409/
и таблица маршрутизации на A:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
таблица маршрутизации на B:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
Соответствующие TCP-клиент и сервер: https://www.cs.cmu.edu/afs/cs/academic/class/15213-f99/www/class26/tcpserver.c
http://www.cs.cmu.edu/afs/cs/academic/class/15213-f99/www/class26/tcpclient.c
Я пытался
убить процесс vpnagent
# ps ax | grep vpnagent
1291 ? S 0:00 /opt/cisco/vpn/bin/vpnagentd
4202 pts/2 S+ 0:00 grep --color=auto vpnagent
#sudo kill -9 1291
а потом
# service vpnagentd stop
# sudo systemctl stop vpnagentd
и я не знаю, из-за этого ли это, в последний день соединение внезапно стало ОК. Но после перезагрузки, запуска вышеуказанных команд для остановки службы vpnagent, проблема "Нет маршрута к хосту" все еще есть
решение1
Fedora использует службу firewalld для блокировки/разрешения портов
Используйте эту команду, чтобы найти активную зону(ы):
firewall-cmd --get-active-zones
Там будет написано public, dmz или что-то еще. Вам следует применять только требуемые зоны.
В случае публичного судебного разбирательства:
firewall-cmd --zone=public --add-port=8000/tcp
если вы хотите сделать это навсегда, попробуйте:
firewall-cmd --zone=public --add-port=8000/tcp --permanent
В противном случае замените dmz на вашу зону, например, если ваша зона публичная:
firewall-cmd --zone=public --add-port=2888/tcp --permanent
Затем не забудьте перезагрузить брандмауэр, чтобы изменения вступили в силу.
firewall-cmd --reload