Ubuntu Server 9.04 + bridge-utils + dhcp3-server 設定メモ

※この記事は情報が不十分なため、ここにある情報だけでセットアップを完了するのはほぼ不可能です。新しく書き直しましたのでそちらを確認下さい。

背景

家のルータが年代物で実効スループットが遅い*1ため、改善しようと思い立つも Gigabit ルータを入れるほど金は使いたくなかったので、とりあえず一枚 440 円の NIC を買ってきて Ubuntu に差し、ルータの代わりをさせてみようと思い立った。

構成

ルータの代わりをさせるにあたり、外側へ WAN を 1 ポート、内側のLAN を数ポート設定したい。んで、LAN の IP アドレスは DHCP で配布する。NIC 一つ一つに DHCP サーバの設定をしてもいいけど、そうすると同一サブネット上で IP を割り振る場合に 1 〜 32 とか区画で区切って配布しなきゃならなくなる。それだと後のメンテが大変(複雑な設定を忘れてハマる)になるので、ブリッジの設定をしてブリッジに DHCP サーバの機能を任せる。
説明の便宜上、インタフェースは以下のように定義する。

WAN:
  eth0
    IP: 192.168.1.2/24
    GW: 192.168.1.1

LAN:
  br0
    IP: 192.168.100.1/24
    GW: 192.168.1.2

必要なパッケージのインストール

いつもの apt-get 先生にお願いしましょう。

sudo apt-get install bridge-utils dhcp3-server

これでそれぞれブリッジの設定、dhcpd サービスの開始が出来るようになる。

IP マスカレード(NAPT)

マスカレードを設定し、内側の LAN から外側の WAN へ通信が行えるようにする。

#> iptables -F
#> iptables -t nat -F
#> iptables-save > /etc/iptables

#> vi /etc/iptables
(*nat 以下に以下の設定を追加)
 -A POSTROUTING -s 192.168.100.0/24 -o br0 -j MASQUERADE

#> iptables-restore < /etc/iptables

設定が反映されているか確認する。

#> iptables -t nat -L
      • -
ACCEPT all ― 192.168.100.0/24 anywhere

sysctlファイルにあるIPv4パケット転送を有効にする。

#> vim /etc/sysctl.conf
(以下の宣言をコメント解除)
net.ipv4.ip_forward=1

      • -
(設定が反映されているか確認) #> sysctl -p net.ipv4.ip_forward = 1

network サービス開始時、interface の up 前に iptables の設定を読み込むようスクリプトを追加

#> vi /etc/network/if-pre-up.d/iptables
      • -
#!/bin/sh sudo /sbin/iptables-restore < /etc/iptables
      • -
#> chmod 755 /etc/network/if-pre-up.d/iptables

dhcp3-server、/etc/network/interface の設定

ブリッジ br0 の記述を /etc/network/interface に追加し、Ubuntu 起動時に自動でブリッジが利用可能になるよう設定する。
※ interfaces の記述方法は完全に理解できておらず、とりあえずこれで動いている、という設定です。必要に応じてより相応しい記述に書き換えるようにして下さい。

#> vim /etc/network/interfaces
      • -
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.2 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-nameserver 192.168.1.1 iface eth1 inet manual iface eth2 inet manual iface br0 inet static address 192.168.100.1 network 192.168.100.0 netmask 255.255.255.0 broadcast 192.168.100.255 gateway 192.168.1.2 bridge_ports eth1 eth2
      • -
#> /etc/init.d/networking restart

終わり

これで動くはず。ifconfig -a したり、実際に LAN ケーブルを繋いで DHCP DISCOVER, OFFER, REQUEST が行えているかを確認する。結果。うちの環境では 1MB/s しか出なかった転送速度が 4MB/s まで向上しました。うっひょお 4 倍。

結論

お金を出して有線LANルータを買いましょう。時間・電気代などを考えると総合的に得です。

*1:22 Mbps ≒ 3MB/s らしいが、実際は 1MB/s くらいしか出てなかった