У меня два сервера. Программа на первом должна взаимодействовать со вторым через порт 2194.
Я знаю, что это не работает, потому что когда я это делаю:
root@server1 [~]# telnet myserver2.com 2194
Trying 123.123.123.98...
telnet: connect to address 123.123.123.98: Connection timed out
telnet: Unable to connect to remote host: Connection timed out
server1# iptables -L -n
Chain INPUT (policy DROP)
...
...
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
...
Chain LOCALINPUT (1 references)
target prot opt source destination
...
Chain LOCALOUTPUT (1 references)
target prot opt source destination
...
Chain LOGDROPIN (1 references)
target prot opt source destination
DROP all -- 0.0.0.0/0 0.0.0.0/0
Chain LOGDROPOUT (1 references)
target prot opt source destination
DROP all -- 0.0.0.0/0 0.0.0.0/0
Чтобы разрешить исходящие соединения от server1 к server2 через TCP-порт 2194, используйте это на server1:
iptables -A OUTPUT -p tcp -d <server2ip> --dport 2194 -j ACCEPT
Чтобы разрешить входящие соединения от server1 к server2 через TCP-порт 2194, используйте это на server2:
iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
Всего несколько указателей
Служба, которую вы используете, слушает только на локальном хосте? Бегать
netstat -ltn
Если вы видите строку вроде 0.0.0.0:2194
тогда ты в порядке. Если ты видишь 127.0.0.1:2194
то вы слушаете только локальные соединения (или :::2194
и ::1:2194
соответственно для адресов IPv6, показанных как tcp6
линий).
Каковы текущие правила iptables?
iptables -L
Есть ли политика DROP / REJECT (если это не так, то должно быть для всех цепочек)? Есть ли какое-то конкретное правило для нужного вам порта?
Если это проблема с брандмауэром, то необходимо либо изменить нарушающее правило, либо добавить такое правило, как
iptables -A INPUT -p tcp --dport 2194 -j ACCEPT
должен сработать (непроверено)
=== РЕДАКТИРОВАТЬ ===
Хороший инструмент для проверки сетевых проблем - tcpdump
. Запустите его на обоих серверах, пытаясь подключиться, и посмотрите, куда идут пакеты. например на сервере 1 запустите:
tcpdump -i eth0 -n host server2.com
и на сервере 2 запустите:
tcpdump -i eth0 -n host server1.com
Потом попробуйте подключиться. Вы должны увидеть все пакеты TCP, сброшенные на экран, от источника и назначения. С помощью этой информации вы сможете точно определить, в чем проблема.