2台のサーバーがあります。最初のプログラムは、ポート2194で2番目のプログラムと通信する必要があります。
私はそれが機能していないことを知っています。
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
TCPポート2194でserver1からserver2への発信接続を許可するには、server1でこれを使用します。
iptables -A OUTPUT -p tcp -d <server2ip> --dport 2194 -j ACCEPT
TCPポート2194でserver1からserver2への着信接続を許可するには、server2でこれを使用します。
iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
いくつかのポインタ
実行しているサービスはlocalhostでのみリッスンしていますか?走る
netstat -ltn
0.0.0.0:2194
のような行が表示されたら、問題ありません。 127.0.0.1:2194
が表示されている場合は、ローカル接続(またはIPv6アドレスの場合は:::2194
および::1:2194
、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パケットが送信元と宛先から画面にダンプされます。この情報を使用すると、問題の場所を正確に特定できるはずです。