新卒で入った会社に3年居て、辞める!といったら、関連会社に転籍することになった。理由は辞めて転職ができると思ったら、先方の超大人の事情で合格だが不採用。それを見かねた役員が、じゃー、同じやりたいことができる子会社行くかと。悪い話ではないので、自ら転籍に。どうやら、自分から転籍することができた第一号へw なぜか、役員が交代で毎朝出席確認してきたが。。。(毎朝来てもらうのも悪いので、毎晩、駅前の中華料理店に一緒にいくようになったら1週間で一応終わった。半分くらいはよく飲みに行く方だったので。監視が監視になっていないw)
その新天地で遭遇したのが、ファイヤーウォールの問題。行った先の上司は、「サーバ屋は、ネットワークを知らず、ネットワーク屋はサーバを知らず。」たしかにこれは名言。ネットワーク屋に「XX番ポートを開けておいて」といっても返りのエフェメラルポートが閉じていることが頻発。その時教わったのが、「telnetでConnectedがでなければ、エフェメラルポートが閉じているぞぉ」と。その部署では、結構いろいろ学べた。他には、同じセグメントなのにPingが通らない事件など。(これは時間があればあとで説明するが、導入で結構起きる。)
やった、設定した、実は設定できていない事件を防ぐ、自分はやったつもり、でも、動かないということを防ぐ。そんなエントリー
閑話休題
Case 1
本当に通信ができているか? Ping通るか?それだけでは済まない。通信できているか?ポートが空いているか?これを説明するには、実際のアプリケーションがないと調べられないかもしれない。それをアプリケーションをインストールしたとしても、モジュールが動作しないとリッスンしているかどうかはわからないとなるとお手上げ。
Case 2
ファイヤーウォールを設定したが、Well-knownポートじゃない。通過できたかどうかは全く不明。sshのポートを使って確認はできなくもないが、余計なConfigを入れたくない。どうにか確認できないだろうか。
できます。netcatを使えば。このコマンド、Sun OSの時代には、疎通を音でお知らせしてくれたような。(間違っているかもしれないが。)今は音ではお知らせはしてくれないと思う。
netcatのインストール
Linuxにせよ、Windowsにせよ、インストールする必要がある。
Ubuntuの場合は、
apt install netcat
でインストールができる。
Windowsのほうはめんどくさくて、そこらへんに落ちているnetcatコマンドはセキュリティで弾かれてしまう。
https://github.com/rahuldottech/netcat-for-windows/からバイナリをダウンロードをする
バイナリーのダウンロードは以下で。ブラウザでやるとだめかも。また、このファイル、ちょっとしたことで、ファイルの処理で跳ねられてしまう。ある意味、ウィルステストにもなるかもしれない。
curl -OL https://github.com/rahuldottech/netcat-for-windows/releases/download/1.12/nc64.exe
実際の利用
簡単にPort 12345の疎通テストをする。
Linuxの場合
サーバ側
nc -l 12345
クライアント側 (WindowsでもLinuxでも)
クライアント側からサーバ側へポートを指定して接続
telnet サーバIP 12345
Windowsの場合
Windows Server 2022で確認したが、普通にコマンドを実行するとエラー(local listen fuxored: INVAL)になるので、以下のオプションで実行する。
サーバ側
nc64.exe -L -p 12345
外部通信しようとしていると警告が出るが、許可をする。
クライアント側 (WindowsでもLinuxでも)
クライアント側からサーバ側へポートを指定して接続
telnet サーバIP 12345
注意
netcatは、勝手にポートをオープンして、通信してしまうので、普通に扱おうとするとWindowsだとセキュリティソフトウェアが抑止するかもしれない。
また、telnetは危険でダメという人もいるかもしれない。tellnetは確かに危険だが、それはtelnet 「サーバ」であって、クライアントはそうでもない。(入れっぱなしにしていて悪用される危険はある。なので、利用が済んだらアンインストールをしておく。)
これで、ネットワーク設定が悪いのか別が悪いのかはわかると思う。
追伸
Windowsのncコマンドはほんと処理しずらいので、自分で別途コードを書いて別のコマンドを持つことにした。nc -l さえ実装できていればことが済むので。