ソケットプログラミング.2
d:id:pneumaster:20090523:1243088465の続き.
前回は待ち受けるIPにINADDR_LOOPBACKを使って,
ローカルホストからのみ接続可能になるようにしました.
今回は,ルータの外を回って接続できるようにしてみます.
外部を通ってコネクションを確立するためには,
前回の環境に対して主に3つの変更が必要でしょう.
- ルータ
- ファイアウォール
- サーバプログラム
ルータの設定は割愛するとして,
ファイアウォールは,opensuseだとiptablesを使うことになるのでしょうか.
iptablesの使い方はよく知らないので,yastを使って設定することにします.
Security and Users -> Firewall -> Custom Rules
外部ゾーンに設定します.
# というか内部ゾーン,DMZの区別もよく分かっていません.
# opensuse内に仮想的にネットワークが作られていると考えるのでしょうか.
Source Networkには,家のグローバルアドレス.
ProtocolにはTCP.
Destination Portには,DEFAULT_PORT*1としておきます.
後はサーバ側のプログラムの変更です.
前回のソースのINADDR_LOOPBACKをINADDR_ANYに書き換えます.
INADDR_ANYは任意のアドレス(0.0.0.0)という意味です.
ちなみにINADDR_LOOPBACKは127.0.0.1です.
これで,接続できます.
どこからでも接続できるようにしたので,
クライアント側のプログラムの2番目の引数は前回と同じように127.0.0.1でも
いいですし,先程確認したグローバルIPアドレスでもOKです.
終わった後は,少なくともルータの設定は元に戻しておきましょう.
参考
- INADDR_ANYとINADDR_LOOPBACK
- 基礎からわかるTCP/IP ネットワーク実験プログラミング―Linux/FreeBSD対応