02 April 2013

Raspberry Piでルータを構築

Raspberry PiにUSB Wifi LANインターフェースを取り付け、ルータとして利用するための方法。

■ イメージ図

20130402-rpi-router.png

イーサネットとWifiを逆にしたWifiアクセスポイント機能付きルータについては、『Raspberry Piでルータを構築』に掲載している。

■ LAN側のネットワーク設定

/etc/network/interfaces
auto lo
iface lo inet loopback

# Wifi
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
iface wlan0 inet dhcp

# Ethernet LAN
auto eth0
iface eth0 inet static
address 172.29.1.1
netmask 255.255.255.0
network 172.29.1.0
broadcast 172.29.1.255
gateway 172.29.1.1

post-up route del default dev $IFACE

最後の1行を忘れると、default routeがeth0側となってしまう。

■ LAN側DHCPサーバの設定

dhcpサーバをインストールする

$ sudo apt-get install isc-dhcp-server

dhcpサーバの設定

/etc/dhcp/dhcpd.conf
〜 略 〜

# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# 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;

〜 略 〜

subnet 172.29.1.0 netmask 255.255.255.0 {
range 172.29.1.100 172.29.1.150;
option broadcast-address 172.29.1.255;
option routers 172.29.1.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "raspberrypi";
option domain-name-servers 8.8.8.8, 8.8.4.4, 192.168.1.1;
}

■ パケット転送の設定

/etc/sysctl.conf
〜 略 〜

# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
#net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
# Enabling this option disables Stateless Address Autoconfiguration
# based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1

〜 略 〜

■ iptablesの設定

ルールの初期化と、IPマスカレードの設定。設定値をファイルに書き出す。

$ sudo iptables -t nat -F
$ sudo iptables -t filter -F
$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
$ sudo iptables-save > /etc/iptables

起動時にiptables設定を読み込むようにする

/etc/network/if-pre-up.d/iptables
#!/bin/sh
iptables-restore < /etc/iptables

ファイル属性の変更

$ sudo chown root:root /etc/network/if-pre-up.d/iptables
$ sudo chmod 755 /etc/network/if-pre-up.d/iptables

この状態でRaspberry Piを再起動するとルータとして機能する。