Debianでのネットワーク設定は/etc/network/interfacesで行う。固定IPアドレスで運用する場合はこのファイルにIPアドレス等の設定を記載していくことになる。複数のネットワークデバイスに複数のIPアドレスを静的に割り当てて運用したい場合は、デフォルトのルーティング以外に1つルールとテーブルを設定する。
最初にネットワークインターフェイスが複数認識されているか、ifconfigコマンドで確認する。通常は自動的にeth0、eth1の順に認識されているはずだ。デバイスが認識されていることが確認できたら、eth0に1つIPアドレス、eth1に2つのIPアドレスを設定するものとする。たとえば以下のような環境である。
eth0
192.168.10.10/24
デフォルトゲートウェイ:192.168.10.1
eth1
192.168.20.10/24, 192.168.20.11/24
デフォルトゲートウェイ:192.168.20.1
全体の考え方としては、eth0はとくに何も考えずに普通に設定し、eth1はIPアドレスだけ指定する。この状態でeth1から入ってきたパケットはeth0から出て行ってしまうので、eth1から入ってきたパケットはeth1から出ていくというように設定するだけである。
静的IPアドレスの設定
まずeth0については通常のスタティックな設定と同様に記載する。
auto eth0 iface eth0 inet static address 192.168.10.10 netmask 255.255.255.0 gateway 192.168.10.1 (dns-nameserversなどDNS関連の記載)
複数デバイス用の設定
次にeth1の設定部分はgeteway記述が不要でIPアドレスの指定部のみ設定する。そして、デバイスが有効になったときにルールとそのルールに対応するルーティングテーブルを設定する。
auto eth1 iface eth1 inet static address 192.168.20.10 netmask 255.255.255.0 post-up ip rule add from 192.168.20.0/24 table 100 prio 10000 post-up ip route add default via 192.168.20.1 dev eth1 table 100 post-down ip route del default table 100 post-down ip rule del table 100 prio 10000
post-upがデバイスが有効になった時の処理、post-downが無効になったとき(ダウンするとき)に実行する掃除コマンドである。
これは手動コマンドでも確認可能だ。まずデフォルトのルールは、次のようになっている。
# ip rule list 0: from all lookup local 32766: from all lookup main 32767: from all lookup default
0から32767のプライオリティの間にルーティングテーブルへの処理が設定されている。一般的な設定(eth0)の設定はmainのテーブルに記載され、プライオリティ32766で実行されている。このルールにプライオリティ10000で追加したものが、「ip rule add from 192.168.20.0/24 table 100 prio 10000」である。これによって192.168.20.0/24からきたパケットは100というテーブルによって処理される。
「ip rule add from 192.168.20.0/24 table 100 prio 10000」を実行したあとのルールは以下のようになる。
# ip rule list 0: from all lookup local 10000: from 192.168.20.0/24 lookup 100 32766: from all lookup main 32767: from all lookup default
追加したルールを削除する場合は、テーブルやプライオリティなど属性を指定して「ip rule del table 100 prio 10000」のようにdelコマンドを実行すれば良い。
次に100テーブルにルーティングを記載する。eth1から入ったパケットはeth1を出ればいいので、ルーティングはeth1から出ていく「ip route add default dev eth1 table 100」と記載するだけでOKだ。
これで2つのネットワークデバイスにそれぞれIPアドレスを設定する状態である。
1つのデバイスに複数のIPアドレスを設定
eth1に2つ目のIPアドレスを設定するにはeth1:1というような「:数字」記載を使う。
auto eth1:1 iface eth1:1 inet static address 192.168.20.11 netmask 255.255.255.0
以上で完了である。
以上の設定をまとめておくと、/etc/network/interfacesは以下のように記述しておけばOKだ。
iface eth0 inet static address 192.168.10.10 netmask 255.255.255.0 gateway 192.168.10.1 iface eth1 inet static address 192.168.20.10 netmask 255.255.255.0 post-up ip rule add from 192.168.20.0/24 table 100 prio 10000 post-up ip route add default via 192.168.20.1 dev eth1 table 100 post-down ip route del default table 100 post-down ip rule del table 100 prio 10000 iface eth1:1 inet static address 192.168.20.11 netmask 255.255.255.0
ルーティングテーブルに名前を付ける
上記では テーブル名を100と数字を使っているが、数字ではなくmytableなどの文字列で設定もできる。設定ファイルは、/etc/iproute2/rt_tablesである。
# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep
255~253および0はすでに使われており、localやmainに基本的なルーティングルールが記述されている。このファイルに
100 mytable
などと追記しておけば、前述の「ip route add」のtable指定にて、mytableなどの表記が利用できる。
それぞれのルーティングテーブルの中身は以下のような設定(環境によって異なる)になっている。listの代わりにshowを使ってもOKである。
# ip route show table local broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 broadcast XX NW XX dev eth0 proto kernel scope link src XX IP XX local XX IP XX dev eth0 proto kernel scope host src XX IP XX broadcast XX BC XX dev eth0 proto kernel scope link src XX IP XX # ip route show table main default via XX GW XX dev eth0 XX IP XX/XX MASK XX dev eth0 proto kernel scope link src XX IP XX