[CentOS] iptables に原因があることをどのようにして絞り込んだのか?

SoftEther VPN サーバー管理マネージャ(Windows 7)から SoftEther VPN サーバー(CentOS)へアクセスできない原因を特定した方法について触れておきたいと思います。

これまでに CentOS の設定を行っていく中で何度か Windows 7 から CentOS へ ping を打ったり、ssh でログインしたりしていたので、すくなくとも IP のレベルでは通信できていることを知っていました。

だから、アプリケーションのレベルで引っかかっているのではないかと疑ったわけです。この場合、VPN サーバー管理マネージャの通信(アプリ)だけが引っかかっているのかどうかを確認していきました。

まずは Windows 7 のコマンドプロンプトを起動して CentOS に対して ping を打ってみます。

C:\Users>ping 172.16.1.2
172.16.1.2 に ping を送信しています 32 バイトのデータ:
172.16.1.2 からの応答: バイト数 =32 時間 =37ms TTL=63
172.16.1.2 からの応答: バイト数 =32 時間 =52ms TTL=63
172.16.1.2 からの応答: バイト数 =32 時間 =82ms TTL=63
172.16.1.2 からの応答: バイト数 =32 時間 =2ms TTL=63172.16.1.2 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 2ms、最大 = 82ms、平均 = 43msC:\Users>

ちゃんと reply が来ています。次に ssh を実行してみます。

C:\Users\user>ssh root@172.16.1.2
root@172.16.1.2’s password:
Last login: Tue Jan 13 08:24:49 2015 from 10.1.0.7
[root@localhost ~]#

CentOS に ssh でログインができることが確認できました。次に VPN サーバー管理マネージャで CentOS にアクセスしてみます。

SoftEtherVPN_ServerKanriManager

上記「接続」ボタンをクリックすると、

connection_fail

ダメなようです。ここまでの結果わかったことは、

  • ping は通る。
  • ssh も大丈夫。
  • VPN サーバー管理マネージャはダメ

という3点です。

ping が通ることから IP レベルの問題ではありません。ssh でログインができることから ssh プロトコル(アプリケーションプロトコルの1つ)に問題はありません。

以上のことから、この問題は明らかに VPN サーバー管理マネージャの通信のみが何らかの理由で NG となっています。何らかの理由は、アプリケーションレベルの問題です。

どこでダメになっているのかを確認するために CentOS で tcpdump を起動し、そこでもう一回 VPN サーバー管理マネージャでアクセスしてどのような結果になるかを観察してみます。パケットキャプチャですね。

ここでの切り分けのポイントは、まず、上手く行っている通信の挙動を tcpdump で確認することです。

だからまずは ping です。Windows 7 の IP 10.1.0.7 から CentOS のIP 172.16.1.2 への ping(ICMP パケット) を tcpdump でキャプチャします。以下のように ICMP だけ拾うように tcpdump を実行しておいて、

[root@localhost ~]# tcpdump icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

それから、Windows 7 から CentOS への ping を実行します。

C:\Users\user>ping 172.16.1.2
172.16.1.2 に ping を送信しています 32 バイトのデータ:
172.16.1.2 からの応答: バイト数 =32 時間 =3ms TTL=63
172.16.1.2 からの応答: バイト数 =32 時間 =9ms TTL=63
172.16.1.2 からの応答: バイト数 =32 時間 =2ms TTL=63
172.16.1.2 からの応答: バイト数 =32 時間 =2ms TTL=63172.16.1.2 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 2ms、最大 = 9ms、平均 = 4msC:\Users\user>

ping が成功しました。この時、CentOS で実行していた tcpdump の画面には下記のような出力が確認できました。

09:30:56.355936 IP 10.1.0.7 > 172.16.1.2: ICMP echo request, id 1, seq 8, length 40
09:30:56.355981 IP 172.16.1.2 > 10.1.0.7: ICMP echo reply, id 1, seq 8, length 40
09:30:57.366344 IP 10.1.0.7 > 172.16.1.2: ICMP echo request, id 1, seq 9, length 40
09:30:57.366362 IP 172.16.1.2 > 10.1.0.7: ICMP echo reply, id 1, seq 9, length 40
09:30:58.374755 IP 10.1.0.7 > 172.16.1.2: ICMP echo request, id 1, seq 10, length 40
09:30:58.374772 IP 172.16.1.2 > 10.1.0.7: ICMP echo reply, id 1, seq 10, length 40
09:30:59.391161 IP 10.1.0.7 > 172.16.1.2: ICMP echo request, id 1, seq 11, length 40
09:30:59.391178 IP 172.16.1.2 > 10.1.0.7: ICMP echo reply, id 1, seq 11, length 40

全部で8行あります。これは Windows 7 から4発の ping が実行され、その行きと帰りのパケットを示しています。

次に ssh を実行した時の挙動を確認してみます。tcpdump を下記のように実施します。10.1.0.7 と ssh でやりとりするパケットのみキャプチャするように指定しています。

[root@localhost tmp]# tcpdump host 10.1.0.7 and port ssh
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

それから Windows 7 から ssh を実行します。

C:\Users\user>ssh root@172.16.1.2
root@172.16.1.2’s password:
Last login: Tue Jan 13 09:23:45 2015 from 10.1.0.7
[root@localhost ~]#

tcpdump の画面は下記のようになりました。

09:39:48.722098 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [S], seq 3245238589, w
in 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
09:39:48.722162 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [S.], seq 4064641671,
ack 3245238590, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], lengt
h 0
09:39:48.725087 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [.], ack 1, win 16425,
length 0
09:39:48.867840 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 1:22, ack 1,
win 229, length 21
09:39:48.928975 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 1:25, ack 22
, win 16419, length 24
09:39:48.929069 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [.], ack 25, win 229,
length 0
09:39:48.931939 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 25:633, ack
22, win 16419, length 608
09:39:48.931969 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [.], ack 633, win 248,
length 0
09:39:48.932120 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 22:862, ack
633, win 248, length 840
09:39:48.934966 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 633:657, ack
862, win 16209, length 24
09:39:48.938492 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 862:1014, ac
k 657, win 248, length 152
09:39:48.943960 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 657:801, ack
1014, win 16171, length 144
09:39:48.969101 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 1014:1734, a
ck 801, win 267, length 720
09:39:49.138829 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 801:817, ack
1734, win 16425, length 16
09:39:49.178309 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [.], ack 817, win 267,
length 0
09:39:49.211803 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 817:865, ack
1734, win 16425, length 48
09:39:49.211825 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [.], ack 865, win 267,
length 0
09:39:49.211962 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 1734:1782, a
ck 865, win 267, length 48
09:39:49.214768 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 865:929, ack
1782, win 16413, length 64
09:39:49.221629 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 1782:1862, a
ck 929, win 267, length 80
09:39:49.441656 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [.], ack 1862, win 163
93, length 0
09:39:51.142681 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 929:1073, ac
k 1862, win 16393, length 144
09:39:51.182306 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [.], ack 1073, win 286
, length 0
09:39:51.335685 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 1862:1894, a
ck 1073, win 286, length 32
09:39:51.492461 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 1073:1137, a
ck 1894, win 16385, length 64
09:39:51.492515 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [.], ack 1137, win 286
, length 0
09:39:51.639775 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 1894:1942, a
ck 1137, win 286, length 48
09:39:51.695362 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [P.], seq 1137:1505, a
ck 1942, win 16373, length 368
09:39:51.695407 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [.], ack 1505, win 305
, length 0
09:39:51.700198 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 1942:1990, a
ck 1505, win 305, length 48
09:39:51.704760 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 1990:2086, a
ck 1505, win 305, length 96
09:39:51.707335 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [.], ack 2086, win 163
37, length 0
09:39:51.808288 IP 172.16.1.2.ssh > 10.1.0.7.49771: Flags [P.], seq 2086:2150, a
ck 1505, win 305, length 64
09:39:52.101101 IP 10.1.0.7.49771 > 172.16.1.2.ssh: Flags [.], ack 2150, win 163
21, length 0

双方向で通信していることがわかるでしょうか。172.16.1.2.ssh > と書かれている行が、CentOS が投げたパケットであることを表し、10.1.0.7.49771 > と書かれている行が Windows 7 が投げたパケットであることを表しています。

そして、ここで、VPN サーバー管理マネージャの様子を tcpdump で確認してみます。VPN サーバー管理マネージャは tcp:5555 を使用しているので tcpdump を下記のように実施します。

[root@localhost tmp]# tcpdump host 10.1.0.7 and port 5555
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

そして、VPN サーバー管理マネージャを先ほどと同じように実行すると、tcpdump の画面にどんな表示が現れたかというと、

09:47:47.950297 IP 10.1.0.7.50502 > 172.16.1.2.personal-agent: Flags [S], seq 38
18145375, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
09:47:51.784035 IP 10.1.0.7.50502 > 172.16.1.2.personal-agent: Flags [S], seq 38
18145375, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
09:47:56.937024 IP 10.1.0.7.50502 > 172.16.1.2.personal-agent: Flags [S], seq 38
18145375, win 8192, options [mss 1460,nop,nop,sackOK], length 0

10.1.0.7.50502 > の行しかないことが確認できます。これは、Windows 7 から CentOS へのパケットであることを示しています。そして、その反対方向のパケットが記録されていないことから、CentOS が Windows 7 へパケットを返していないことがわかります。

ここまでくれば、CentOS がなぜ Windows 7 へパケットを返さないのか?を考えれば良いことになります。その答えがなんだろうと考えた時に、CentOS 上で稼働しているファイアウォール機能、つまり iptables が邪魔をしているのではないか?という考えにつながっていったわけです。

ならば iptables を OFF にしてどうなるかを確認すれば良いことになりますから、下記のようにして iptables を OFF にしてしまいます。

[root@localhost tmp]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@localhost tmp]# service iptables status
iptables: Firewall is not running.
[root@localhost tmp]#

この状態で VPN サーバー管理マネージャが通信できるようになれば、原因が iptables にあったと断定できます。

VPN サーバー管理マネージャを起動して再度「接続」ボタンをクリックしてみると、

VPNServer_kanrigamen

無事接続できました!!

これで、SoftEther VPN サーバーの設定を VPN サーバー管理マネージャを使って行なうことができるようになりました。

参考までにこのときの tcpdump の様子を載せておくと、

10:00:50.309488 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [S], seq 20
94644342, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
10:00:50.309529 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [S.], seq 3
646003925, ack 2094644343, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscal
e 6], length 0
10:00:50.312479 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [.], ack 1,
win 16425, length 0
10:00:50.318476 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 1
:112, ack 1, win 16425, length 111
10:00:50.318493 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [.], ack 11
2, win 229, length 0
10:00:50.320681 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 1
:1103, ack 112, win 229, length 1102
10:00:50.323472 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 1
12:422, ack 1103, win 16149, length 310
10:00:50.356605 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 1
103:1146, ack 422, win 245, length 43
10:00:50.359426 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 4
22:709, ack 1146, win 16138, length 287
10:00:50.360219 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 1
146:1620, ack 709, win 262, length 474
10:00:50.387444 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 7
09:2680, ack 1620, win 16425, length 1971
10:00:50.387477 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [.], ack 26
80, win 308, length 0
10:00:50.388176 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 1
620:2266, ack 2680, win 308, length 646
10:00:50.485381 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 2
680:3484, ack 2266, win 16263, length 804
10:00:50.487200 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 2
266:2759, ack 3484, win 353, length 493
10:00:50.492357 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 3
484:4743, ack 2759, win 16140, length 1259
10:00:50.493781 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 2
759:3974, ack 4743, win 399, length 1215
10:00:50.497350 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 4
743:5151, ack 3974, win 16425, length 408
10:00:50.497884 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 3
974:4676, ack 5151, win 445, length 702
10:00:50.500358 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 5
151:5243, ack 4676, win 16249, length 92
10:00:50.500676 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 4
676:4747, ack 5243, win 445, length 71
10:00:50.503371 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 5
243:5412, ack 4747, win 16231, length 169
10:00:50.503682 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 4
747:4883, ack 5412, win 490, length 136
10:00:50.506370 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 5
412:5581, ack 4883, win 16197, length 169
10:00:50.506676 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 4
883:5019, ack 5581, win 536, length 136
10:00:50.509366 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 5
581:5989, ack 5019, win 16163, length 408
10:00:50.509891 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 5
019:5721, ack 5989, win 581, length 702
10:00:50.512365 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 5
989:6054, ack 5721, win 16425, length 65
10:00:50.537685 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [.], seq 57
21:7181, ack 6054, win 581, length 1460
10:00:50.537697 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 7
181:8569, ack 6054, win 581, length 1388
10:00:50.541349 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [.], ack 85
69, win 16425, length 0
10:00:50.567333 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 6
054:6119, ack 8569, win 16425, length 65
10:00:50.567841 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 8
569:9426, ack 6119, win 581, length 857
10:00:50.571332 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 6
119:6189, ack 9426, win 16210, length 70
10:00:50.571626 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 9
426:9557, ack 6189, win 581, length 131
10:00:50.574329 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 6
189:6451, ack 9557, win 16178, length 262
10:00:50.574709 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 9
557:9836, ack 6451, win 627, length 279
10:00:50.783309 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 9
557:9836, ack 6451, win 627, length 279
10:00:51.201305 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 9
557:9836, ack 6451, win 627, length 279
10:00:51.601747 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 6
451:6575, ack 9836, win 16108, length 124
10:00:51.601757 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [.], ack 98
36, win 16108, options [nop,nop,sack 1 {9557:9836}], length 0
10:00:51.602048 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 9
836:9917, ack 6575, win 627, length 81
10:00:51.602729 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 6
451:6575, ack 9836, win 16108, length 124
10:00:51.602776 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [.], ack 65
75, win 627, options [nop,nop,sack 1 {6451:6575}], length 0
10:00:51.608725 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [.], ack 98
36, win 16108, options [nop,nop,sack 1 {9557:9836}], length 0
10:00:51.609722 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 6
451:6575, ack 9836, win 16108, length 124
10:00:51.609754 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [.], ack 65
75, win 627, options [nop,nop,sack 1 {6451:6575}], length 0
10:00:51.804611 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [.], ack 99
17, win 16088, length 0
10:00:51.916545 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 6
575:6983, ack 9917, win 16088, length 408
10:00:51.916572 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [.], ack 69
83, win 673, length 0
10:00:51.917080 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 9
917:10619, ack 6983, win 673, length 702
10:00:51.920543 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 6
983:7079, ack 10619, win 16425, length 96
10:00:51.924434 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 1
0619:10671, ack 7079, win 673, length 52
10:00:51.927537 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 7
079:7144, ack 10671, win 16412, length 65
10:00:51.928038 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 1
0671:11528, ack 7144, win 673, length 857
10:00:51.931537 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [P.], seq 7
144:7236, ack 11528, win 16197, length 92
10:00:51.932283 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [.], seq 11
528:12988, ack 7236, win 673, length 1460
10:00:51.932291 IP 172.16.1.2.personal-agent > 10.1.0.7.51547: Flags [P.], seq 1
2988:13802, ack 7236, win 673, length 814
10:00:51.935508 IP 10.1.0.7.51547 > 172.16.1.2.personal-agent: Flags [.], ack 13
802, win 16425, length 0

以上のようになります。双方向で通信している様子がわかるでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください