ソケットプログラミング.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です.


終わった後は,少なくともルータの設定は元に戻しておきましょう.

*1:前回のソースプログラム内では,
#define DEFAULT_PORT 41952
としました.