IP Masquerade とわなにか?みたいなコトに関しては TCP/IP ねっとわーく概論の方で説明してあるから、省略。
(ちなみに、NAT と NATe と NAPT (IP Masquerade を含む)の違いをまったく知らないってヒトは、構築以前に TCP/IP ねっとわーく概論のルータやゲートウェイの説明を読んだ方が良いかもです。)
RedHat 系なヒトは必要はないかもだけど、Slackware 系のヒトは必要な場合が多いみたいです。
# Plamo 1.4.3 や 2.0 は最初から必要なオプションは付いてたけど、2.1 は再構築が必要だった(^_^;)
まぁ、確認の方法としては、後述の ipfwadm や ipchains を使ったルール(設定)を実行しよーとして、「そんなの知らない」って蹴られたら Kernel の再構築が必要だと思うです。
で、ココではあくまで IP Masquerade 自体の設定のみ説明するので、Kernel の再構築が必要なヒトは他のページを参考にどぞ(ぉぃ
一応 うち(Plamo 2.1 / Kernel 2.2.16)の Kernel Configuration は置いとくけど(^_^;)
まづ、IP Masquerade を使うためには、IP Forwarding が使えるよーになってないといけないの。
(ちなみに、Plamo1.4.3/98 は Kernel か何かの問題で IP Forwarding が動かないために IP Masquerade が使えなかった(苦笑))
使えるよーにするって言っても、/proc/sys/net/ipv4/ip_forward (モノによっては、/proc/sys/net/ipv4/ip_forwarding)の値を 1 にするだけなんだけど。
具体的には
echo 1 > /proc/sys/net/ipv4/ip_forward
こんなふーに打てば 1 になるの。
それで、毎回コレをしないと 1 にならないみたいだから、/etc/rc.d/rc.inet2 あたりに書いておけば良いかと。
だから
echo -n "Enabling IPv4 packet Forwarding: " echo 1 > /proc/sys/net/ipv4/ip_forward echo
なんて、書いておくとかっこいーかもね(笑)
ちなみに、RedHat 系を使ってるヒトは、/etc/sysconfig/network の中にある FORWARD_IPV4 ってゆーのを、true か yes かなんかにするだけで上で書いたコトがされるみたい。
って、別に特別なコトがされてるワケぢゃなくて、FORWARD_IPV4 が true だったら、"echo 1 > /proc/sys/net/ipv4/ip_forward" を実行、みたいなシェルスクリプトが書かれてるからなんだけど(笑)
IP Masquerade は概念的には「○○から来て××へ行こーとするパケットを△△する」ってゆーよーなルール(設定)をたくさん書くコトでいろいろするよーになってて、そのルールはどーやって設定するかってゆーと、ルールを設定するツールを実行するコトで設定するんだけど、それは Kernel のばーじょんによって使うモノが違うの。
Kernel 2.0.x, 2.1.102 以前の 2.1.x 系は、ipfwadm。
Kernel 2.1.102 以降の 2.1.x 系と 2.2.x 系は、ipchains を使うみたい。
# 2.3.x や 2.4.x の方は知らなぁ〜い(ぉぃ
セキュリティをあまり顧みず、とりあえず IP Masquerade だけ出来れば良いのなら・・・
(プライベート IP アドレスに 192.168.0.0/24 を使ってる場合)
ipfwadm の場合なら
ipfwadm -F -p deny
ipfwadm -F -a accept -m -S 192.168.0.0/24 -D 0.0.0.0/0
こんな感じ。
ipchains なら
ipchains -P forward DENY
ipchains -A forward -s 192.168.0.0/24 -d 0.0.0.0/0 -j MASQ
こんな感じ。
いずれも、192.168.0.0/24 から来て、どっか適当な場所(0.0.0.0/0)へフォワーディングされるパケットをみんなマスカレードして、それ以外で来たのは破棄ってゆーよーな設定。
まぁ、/etc/rc.d/rc.inet2 とか /etc/rc.d/local とかそのへんに書いておけば良いんぢゃないかと。
# うちは、rc.ipmasq って別ファイルにしてそれを起動時に呼び出すよーにして、そっちに書いてるけど(^_^;)
で、セキュリティを追求した場合はとゆーと、あまりに複雑だし環境にも依存する部分があると思うのでパス(爆)
個人的には、TCP Wrapper を使ってるのなら、あとは IP Masquerade でインターフェースによるフィルタリングをするだけで、「とりあえずは」良いと思ふのです。
# TCP Wrapper だけだと、IP Spoofing 攻撃に遭ったら大変だし。
ちなみに、インターフェースは、/sbin/ifconfig なんてすれば見れるかと。
ループバックインターフェースは lo。
内部は、LAN カードのデバイス名(大抵は、eth0 とか eth1 ぢゃない?)
PPxP を(Userlink で)使ってると、外部インターフェース(グローバル IP アドレスが割り振られるインターフェース)は ul0 なんてゆーのになってるの。
# Ethertap の場合には、tap0
だから、userlink で PPxP を使ってるのなら、
ipfwadm -F -a deny -S 192.168.0.0/16 -W ul0 ipfwadm -I -a deny -S 192.168.0.0/16 -W ul0
もしくは、
ipchains -I output -s 192.168.0.0/16 -i ul0 -j DENY ipchains -I output -d 192.168.0.0/16 -i ul0 -j DENY
こんなふーに書くと、ul0 ってインターフェース(即ち外側・・・インターネット側)から 192.168.0.0/16 を名乗って来たパケットは deny(黙殺)するって感じになるワケ。
# Ethertap で PPxP を使ってるのなら ul0 は tap0 に置換。
ちなみに、deny ぢゃなくて reject にすれば明確に拒絶出来るけど・・・まぁ、そこは好みの問題でせう(笑)
# deny だと黙殺。reject だと拒否の旨を要求してきたノードに送信するの。
FTP とか IRC とか、また Read Audio とか VDO Live が通らないってときには、IP Masquerade のモジュールが組み込まれてない可能性があるのね。
lsmod とか(もしくは /sbin/lsmod で) やってみて ip_masq_なんちゃら ってゆーよーなのがなかったら組み込まれてない証拠。(lsmod なんてないって言われたら?・・・入れるしか(爆))
だからそんなときには、まづ /lib/modules/[Kernel のばーじょん]/ipv4 とかの中に ip_masq_ftp.o とかってゆーよーなモジュールファイルがあるかどーか確認して、あるよーなら /etc/rc.d/rc.modules とかモジュールを起動させるよーなファイルに、
/sbin/modprobe ip_masq_ftp・・・モジュールファイルがなかったら?(笑)
IP Masquerade が Kernel オプションで有効にしてあって、Kernel の再構築時にちゃんとモジュールもコンパイルしてインストールしてれば、ないハズはないと思ふ(笑)
逆に、カーネルオプションでそのへんを有効にしてないとか、make modules とか make modules_install を再構築時にしてなければ、ないです(笑)
(古い Kernel だとなかったり少なかったりするのかもしれないけど、IP Masquerade がないよーな古い Kernel を使ってるってコトは今時ないと思うし(^_^;))
できあがり〜♪(ぱちぱち)