eth0,eth1と複数のネットワークデバイスに複数のIPアドレスを静的に設定

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