2015年5月24日日曜日

Raspberry Pi をルーター&無線LANルーター化する

この4月から一人暮らしを始め,自宅のネットワーク環境をすべて自分で管理することができるようになったので,Raspberry Piでルーターおよび無線LANルーターを自作してみた.

Raspberry Pi を無線アクセスポイント化する話はネットでチラホラ見かけるがその応用だ.

まず,Raspberry Pi にはイーサネット端子が1つしか無いのでUSBから変換するケーブルを繋ぐ.今回利用したのは LUA3-U2-ATX という製品.繋ぐだけで認識され ifconfig コマンドを叩けば,eth1 としてきちんと表示される.





また無線LANルーターとして動かすためには,お馴染みの WLI−UC−GNM を利用した.こちらも繋ぐだけで認識され ifconfig コマンドを叩けは,wlan0 として表示される.



これらのハードを Raspberry Pi に繋いで起動したら設定を始める.



最終的な目標はこんな感じ.
WAN側(eth0) :DHCPで自動でIPアドレス取得,モデムと接続.
LAN側(eth1) :192.168.100.1,ハブと接続.
LAN側(wlan0):192.168.200.1,無線LANアクセスポイントとして動作.

eth1 および wlan0 には DPCPサーバー を設定し,接続した機器には自動でIPアドレスを振るように設定.

まずは必要なソフトをインストールする.
$ sudo apt-get install hostapd
$ sudo apt-get install isc-dhcp-server

そして,以下のファイルを管理者権限で開き,編集していく.


■/etc/default/hostapd
hostapd の設定ファイルの場所を設定するため,DAEMON_CONF のコメントアウトを外し以下のように書き換える.
(編集前)
#DAEMON_CONF=""
(編集後)
DAEMON_CONF="/etc/hostapd/hostapd.conf"


■/etc/hostapd/hostapd.conf
もともと存在しないファイルのため新規で作成し,以下のように記して保存する.
interface=wlan0
driver=nl80211
ssid=hogehoge
hw_mode=g
channel=8
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=piyopiyo
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

■hostapd自動起動
最後に上記の設定で,OS起動時にhostaptが自動で起動するように設定する.
$ sudo update-rc.d hostapd enable

【2016.11.13追記】
jessieからはsystemdが標準になったので以下のコマンドで自動起動化する.

$ sudo systemctl enable hostapd.service



■/etc/default/isc-dhcp-server
DHCPを動作させるネットワークを設定するため,INTERFACES に wlan0 と eth1 を加える.
(編集前)
INTERFACES=""
(編集後)
INTERFACES="wlan0 eth1"


■/etc/dhcp/dhcpd.conf
DHCPサーバの設定をする.

コメントアウト.
(編集前)
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
(編集後)
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;

コメントアウト解除.
(編集前)
#authoritative
(編集後)
authoritative

さらに末尾に以下を追加.
subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.101 192.168.100.200;
    option routers 192.168.100.1;
    option broadcast-address 192.168.100.255;
    option subnet-mask 255.255.255.0;
    default-lease-time 600;
    max-lease-time 7200;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    host hoge {
        hardware ethernet aa:aa:aa:aa:aa:aa;
        fixed-address 192.168.100.2;
    }
}

subnet 192.168.200.0 netmask 255.255.255.0 {
    range 192.168.200.101 192.168.200.200;
    option routers 192.168.200.1;
    option broadcast-address 192.168.100.255;
    option subnet-mask 255.255.255.0;
    default-lease-time 600;
    max-lease-time 7200;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    host piyo {
        hardware ethernet bb:bb:bb:bb:bb:bb;
        fixed-address 192.168.200.2;
    }
}

ここでは MACアドレスが

aa:aa:aa:aa:aa:aa のクライアントの IPアドレス を 192.168.100.2 に,
bb:bb:bb:bb:bb:bb のクライアントの IPアドレス を 192.168.200.2 に設定するようにしている.


■/etc/network/interfaces
eth1 および wlan0 の IPアドレス を固定,および iptables コマンドの設定をする.
※jessieではこの設定ではうまくいかないので,下の【追記】を参照方.

コメントアウト.
(変更前)
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
(変更後)
#auto wlan0
#allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

さらに,末尾に以下を追加.
iface eth1 inet static
 address 192.168.100.1
 netmask 255.255.255.0
 broadcast 192.168.100.255
 pre-up /sbin/sysctl net.ipv4.conf.all.forwarding=1
 pre-up /sbin/iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
 pre-up /etc/init.d/isc-dhcp-server stop
 post-up /etc/init.d/isc-dhcp-server start
 post-down /sbin/iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
 post-down /sbin/sysctl net.ipv4.conf.all.forwarding=0

iface wlan0 inet static
 address        192.168.200.1
 netmask        255.255.255.0
 broadcast      192.168.200.255
 pre-up         /sbin/sysctl net.ipv4.conf.all.forwarding=1
 pre-up         /sbin/iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j MASQUERADE
 pre-up         /etc/init.d/isc-dhcp-server stop
 post-up        /etc/init.d/isc-dhcp-server start
 post-down      /sbin/iptables -t nat -D POSTROUTING -s 192.168.200.0/24 -j MASQUERADE
 post-down      /sbin/sysctl net.ipv4.conf.all.forwarding=0

【2016.11.13追記】
jessieからは固定IPアドレスの設定ファイルが変更になったので,以下のように設定する.①〜③


①IPアドレス固定化(/etc/dhcpcd.conf)
interface=eth1
static ip_address=192.168.100.1/24

interface=wlan0
static ip_address=192.168.200.1/24

②IPフォワーディングの有効化
# vim /etc/sysctl.conf
net.ipv4.conf.all.forwarding=1

③NAPTの設定及びisc-dhcp-server再起動(/sbin/forward_and_nat_set.shを作成)
#!/bin/bash

/sbin/iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j MASQUERADE
/bin/systemctl restart isc-dhcp-server.service

exit 0

④/sbin/forward_and_nat_set.sh自動起動
sudo crontab -e
@reboot    /sbin/forward_and_nat_set.sh

最後に再起動する.
$ sudo reboot


正しく設定が行えていれば,これで Raspberry Pi がルーター,無線LANルーター,DHCPサーバーとして動作する.

肝は iptables でルーティングを設定する箇所.一旦,dhcpを止めて,ルーティングを決めてから,dhcpを再起動する.

ただし,この設定のままではファイアーウォールがガバガバなので,Raspberry Pi をゲートウェイにする場合には,もう少し設定をするべき.

0 件のコメント:

コメントを投稿