ポートが開かない

とあるソフトを使おうとしているのだけど、どうもポートが開かない。
こちらのOSはWindowsXP SP2である。

なんでだろうなぁ。
問題を絞り込んでみた。
今の環境は、

ルーター → Linux
     → Windows

となっている。

Linux は80と443をあけており、ルータはインターネット側の80と443へのアクセスは Linux 側に飛ばしている。IPマスカレードというやつである。

仮に、35000というポートをWindowsを開けて、ルータで設定してもうまくインターネット側からWindowsまで通らないのだ。

この35000が悪いのか、と考えてみる。
Linux 側ではうまく80と443はうまくIPマスカレードできているので、Linuxで35000まで通るか試してみる。

#!/usr/bin/perl

use strict;
use warnings;
use Socket;

my $port = 35000;

socket(CLIENT_WAITING, PF_INET, SOCK_STREAM, 0) or die $!;

bind(CLIENT_WAITING, pack_sockaddr_in($port, INADDR_ANY)) or die $!;

listen(CLIENT_WAITING, SOMAXCONN) or die $!;

print "i am listening port $port ...\n";

while (1){
    my $paddr = accept(my $CLIENT, CLIENT_WAITING);
    my ($client_port, $client_iaddr) = unpack_sockaddr_in($paddr);
    my $client_hostname = gethostbyaddr($client_iaddr, AF_INET);
    my $client_ip = inet_ntoa($client_iaddr);

    print "CONN: $client_hostname ($client_ip) , port $client_port\n";
}

exit;

というツールをつくって試してみた。簡易サーバである。
するとちゃんと開いているではないか。

Windows 側でもCygwinで同様に上記コードを動かしてみたら、つながらない。LinuxからWindowsへのアクセスもできない。

つまり問題はWindowsにある。
なんでだろうなぁ。Firewall無効にしているし、切り分けのためにウィルスソフトはアンインストールしているのにな。