Linuxマシンをルータにする方法

 

Linuxでフィルタリングも何もしないただのルータを作成する事ができる。ルーティングにおけるポイントを解説する。

ルータは、自分自身に来たパケットの宛先IPアドレスを見て、自分宛ではなければ、保持しているルーティングテーブルに照らし合わせ、適合するものがあればその先に転送(IPフォワード)する。もしなければデフォルトゲートウェイに転送する、といった動作をする機器である。

 

Linuxの初期設定では、IPフォワードされないようになっている。Linuxマシンをルータとして使用するなら、まずIPフォワードするように設定を何箇所か変更する必要がある。

 

IPフォワードのための設定

@/proc/sys/net/ipv4/ip_forward

    次のコマンドでip_forwardファイルを見ると、初期設定では0となっている。

# cat /proc/sys/net/ipv4/ip_forward

0

    これを1に変えてやる必要があるため、次のコマンドでip_forwardファイルを1で上書き。

# echo 1 >/proc/sys/net/ipv4/ip_forward

    もう一度確認して1になっていればOK

# cat /proc/sys/net/ipv4/ip_forward

1

    再起動すると元にもどってしまうらしいので、/etc/rc.d/rc.localファイルに

echo 1 >/proc/sys/net/ipv4/ip_forward

    の一行を書き加える。

 

A/etc/sysconfig/network

    次に、/etc/sysconfig/networkファイルを書き変える。

NETWORKING=yes

HOSTNAME=’localhost.localdomain’

FORWARD_IPV4=yes

GATEWAY=

VATEWAYDEV=

    緑色で表した下三行を書き加える。GATEWAY=の後にIPアドレスが書かれていたら上のように消去しておいた方がよいらしい。

 

B/etc/sysctl.conf

    次に、/etc/sysctl.confファイルを編集し、

net.ipv4.ip_forward = 0

    の部分を

net.ipv4.ip_forward = 1

    に変更する。

以上でルータ構築のためのベース設定は終了である。

念のため再起動しておいた方がよい。

 

■ルーティング

ルーティングはきちんと考えないとPINGの通らないルーティングになってしまう。特に、パケットを送る設定はよいが、パケットの戻り先のルーティングを忘れてしまったりするので注意が必要である。

以下に今回のサンプル設定のネットワーク図を載せる。

まずは、NICを認識させ、IPアドレスまで設定する。設定した状態でのルーティングテーブルを見てみよう。

 

ルータマシン1(初期)(デフォルトゲートウェイを192.168.4.1としている)

Destionation     Gateway       Genmask      Iface

192.168.4.0      0.0.0.0         255.255.255.0    eth0

10.0.0.0         0.0.0.0          255.255.255.0   eth1

127.0.0.0        0.0.0.0          255.0.0.0       lo

0.0.0.0           192.168.4.1     0.0.0.0         eth0

ルータマシン1には10.10.10.0/24のセグメントに対するルーティングテーブルが書かれていないのでそれを追加する。

# /sbin/route add –net 10.10.10.0 netmask 255.255.255.0 gw 10.0.0.2 eth1

10.0.0.2へのフォワードをeth110.0.0.2と繋がっている側)のNICを使用して行なうので上記のような指定になる。この設定は、10.10.10.2IPアドレスを持つ一番右側のコンピュータからpingを打った時の帰り道の設定でもある。

192.168.4.0/2410.0.0.0/2410.10.10.0/24のセグメント以外へのパケットは全てデフォルトゲートウェイに行く設定となっているので問題は無い。

  

ルータマシン2(初期)(デフォルトゲートウェイは10.0.0.1

Destination      Gateway       Genmask      Iface

10.0.0.0         0.0.0.0          255.255.255.0    eth0

10.10.10.0       0.0.0.0          255.255.255.0    eth1

127.0.0.0        0.0.0.0          255.0.0.0         lo

0.0.0.0          10.0.0.1         0.0.0.0           eth0

この設定では10.0.0.0/2410.10.10.0/24のセグメント以外のパケットは全て10.0.0.1に送られる状態となっている。その中には192.168.4.0/24も含まれているため、この状態では特に書き加えるルーティングテーブルはない。

 

さて、これで設定が終了した(実際には一行しかルーティングテーブルを増やしていない)わけだが、うまくpingが通るのだろうか。

ルータマシン1、ルータマシン2、クライアントマシンの計3台から全てのIPアドレス(合計6個)に対してpingを打ってみよう。そうすると、問題がある事に気付く。

ルータマシン1から192.168.4.1pingを打つと応答があるが、ルータマシン2、クライアントマシンから192.168.4.1pingを打った場合、応答がない。これは192.168.4.1のルータに、戻りの経路情報(ルーティングテーブル)が書き込まれていないからである。10.0.0.0/2410.10.10.0/24のセグメントに行くパケットは192.168.4.140に送るように指定しないと、パケットの戻り先が分からず、パケットがその場で一定時間後、消えてしまうのである。

これを避けるためには、192.168.4.1IPアドレスを持つデフォルトゲートウェイに、10.0.0.0/2410.10.10.0/24セグメントの経路情報を書き加えてやればよい。

もしそれができないなら、ルータマシン1上で10.0.0.0/2410.10.10.0/24セグメントを送信元とするパケットに対し、IPマスカレードしてやればよい。

実際に、ルータマシン1にはipchainsを使用して、次のような設定を行なっている。

# /sbin/ipchains –A forward –s 10.10.10.0/24 –j MASQ   送信元を10.10.10.0/24とするパケットをマスカレード

# /sbin/ipchains –A forward –s 10.0.0.0/24 –j MASQ   送信元を10.0.0.0/24とするパケットをマスカレード

ipchains設定を参照してみる。

# /sbin/ipchains –nL

Chain input (policy ACCEPT):

target     prot opt     source                destination           ports

ACCEPT     all  ------  0.0.0.0/0            0.0.0.0/0             n/a

ACCEPT     all  ------  0.0.0.0/0            0.0.0.0/0             n/a

ACCEPT     all  ------  0.0.0.0/0            0.0.0.0/0             n/a

ACCEPT     udp  ------  192.168.0.10         0.0.0.0/0             53 ->   *

ACCEPT     udp  ------  192.168.0.15         0.0.0.0/0             53 ->   *

REJECT     tcp  -y----  0.0.0.0/0            0.0.0.0/0             * ->   *

REJECT     udp  ------  0.0.0.0/0            0.0.0.0/0             * ->   *

Chain forward (policy ACCEPT):

target     prot opt     source                destination           ports

MASQ       all  ------  10.0.0.0/24          0.0.0.0/0             n/a

MASQ       all  ------  10.10.10.0/24        0.0.0.0/0             n/a

Chain output (policy ACCEPT):

#

これで、3台のどれからも192.168.4.1及び外部ネットワークに繋がるようになる。

戻る




100MB無料ホームページ可愛いサーバロリポップClick Here!