即席ルータ@NetBSD

行った先で、自由に使える無線LAN-APがあったとしても、何人もが 同時に繋ぎに行ったら電波の取り合いですぐ使い物にならなくなる。 無線でAPに繋ぐ代表機を決めて、その下流に有線クライアントをぶら下げると 安定して使える。

NetBSDだとdhcpdが最初っから入ってるので楽。手順:

  1. 無線LANのI/Fを通常どおり設定して自機が外部ネットワークに 出て行けるようにする。

  2. IPフォワーディングを(無効なら)有効化しておく。

    sysctl -w net.inet.ip.forwarding=1
    
  3. 下流からの通信にNATをかます。PFならこんな感じ。
    /etc/pf.conf:

    ext_if="ral0"		# 上流(無線LAN)インタフェース
    int_if="wm0"		# 下流(有線LAN)インタフェース
    nat on $ext_if from !($ext_if) -> ($ext_if:0)
    

    上記設定でpfを動かす。

    modload /usr/lkm/pf.o
    pfctl -e -Fr -f /etc/pf.conf
    
  4. 下流に繋がるPC用にDHCPサーバを動かす。IPアドレスは プライベートアドレスなら何でも。
    /etc/dhcpd.conf:

    option domain-name "hogehoge.example.jp";
    option domain-name-servers 192.168.0.1;  # 上流のDHCPからもらったものを書く
    ddns-update-style none;
    
    default-lease-time 600;
    max-lease-time 7200;
    
    # Use this to send dhcp log messages to a different log file (you also
    # have to hack syslog.conf to complete the redirection).
    log-facility local7;
    
    # This is a very basic subnet declaration.
    
    # A slightly different configuration for an internal subnet.
    subnet 192.168.11.0 netmask 255.255.255.0 {
      range 192.168.11.100 192.168.11.149;
      option routers 192.168.11.1;
      default-lease-time 600;
      max-lease-time 7200;
    }
    

    で、起動。

    dhcpd wm0