ページ

2019年12月8日日曜日

Raspberry Pi を 5.0GHz 無線アクセスポイント及びルーターにする


IPv4 over IPv6に対応させた記事に纏め直しています.こちらを参照ください.
WM×LI: Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする



【2020年7月24日追記】IPv6 に対応させました.
【2021年2月10日追記】DNS サーバも併用させました.

ようやく日本でも注文可能になったので早速,Raspberry Pi 4 を購入した.メモリ 4.0GB 搭載.Bluetooth 対応など,かなり機能が拡張されたが,個人的に熱いのは 5.0GHz帯の無線LANに対応したことだ.

今回はそのメリットを活かして,以前作成した無線LANルーターを 5.0GHz に対応させつつ,当時の欠点の克服,さらに今までに獲得したノウハウも詰め込んでいく.

一方,残念なことに5.0GHzの無線LAN に非対応の機器も僅かながら稼働中のため,USBドングルで拡張させ,2.4GHz の無線LAN も同時に動かす.

まず以前作成したルーターについては,下記の記事に残してある.
WM×LI: Raspberry Pi をルーター&無線LANルーター化する

このときは,eth0(WAN側の有線),eth1(LAN側の有線),wlan0(LAN側の無線) をすべて別セグメントに設定していたが,LAN側の有線と無線は同じセグメントにしたほうが便利なことが多い.長らくその手法がわからなかったが,ひょんなことから作成したラズパイのスイッチングハブ(下記,記事参照)を応用すれば,簡単に作れることがわかった.
WM×LI: Rapberry Pi をスイッチングハブ化する 【bridge-utils】

また,起動時の設定で cron の @reboot を使用していたが,/etc/rc.local に記述するほうが簡単なのでそちらを採用する.

前置きが長くなったが,ここから設定方法について記載していく.

最終型は以下の構成だ.
 WAN側(eth0) :ラズパイにある有線LANポート.スイッチングハブと接続する.
 LAN側(eth1) :USB-NICで拡張した有線LANポート.WAN側のモデムと接続し,DHCPで自動的にIPアドレスを取得する.
 LAN側(wlan0):ラズパイにある無線LANポート.5.0GHz 無線LANアクセスポイントとして動作させる.
 LAN側(wlan1):USBドングルで拡張した無線LANポート.2.4GHz 無線LANアクセスポイントとして動作させる.
 Bridge(br0) :eth1,wlan0,wlan1をつなぐブリッジ.192.168.100.1/24に設定する.

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


1.必要なソフトのインストール.
 # apt install bridge-utils
 # apt install hostapd
 # apt install isc-dhcp-server
 # apt install radvd
 # apt install dnsmasq


2.ブリッジの設定.
/etc/network/interfaces(以下を,追記)
------------------------------
auto br0
iface br0 inet manual
  bridge_ports eth0 wlan0 wlan1
  bridge_stp off
  bridge_maxwait 3

/etc/dhcpcd.conf(以下を,追記)
------------------------------
denyinterfaces eth0 wlan0 wlan1

interface br0
static ip_address=192.168.100.1/24
static ip6_address=fd00:0:0:1::1/64
static domain_name_servers=8.8.8.8 8.8.4.4


3.5.0GHz 無線アクセスポイントの設定.
/etc/default/hostapd(以下の通り,修正)
------------------------------
(修正前)#DAEMON_CONF=""
(修正後)DAEMON_CONF="/etc/hostapd/hostapd.conf"

/etc/hostapd/hostapd.conf(新規作成)
------------------------------
interface=wlan0
bridge=br0
driver=nl80211
ssid=hogehoge5.0
hw_mode=a
channel=36
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


4.2.4GHz 無線アクセスポイントの設定.
(以下のコマンドを実行)
------------------------------
 # sed -e 's/hostapd\/hostapd.conf/hostapd\/hostapd2.conf/g' /etc/default/hostapd > /etc/default/hostapd2
 # sed -e 's/hostapd\/hostapd.conf/hostapd\/hostapd2.conf/g' -e 's/default\/hostapd/default\/hostapd2/g' /lib/systemd/system/hostapd.service > /etc/systemd/system/hostapd2.service

/etc/hostapd/hostapd2.conf(新規作成)
------------------------------
interface=wlan1
bridge=br0
driver=nl80211
ssid=hogehoge2.4
hw_mode=g
channel=1
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


5.DHCPサーバの設定.
/etc/default/isc-dhcp-server(以下の通り,修正)
------------------------------
(修正前)INTERFACESv4=""
(修正後)INTERFACESv4="br0"

/etc/dhcp/dhcpd.conf(以下の通り,修正)
------------------------------
(修正前)
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
#authoritative

(修正後)
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
authoritative
subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.101 192.168.100.200;
    option domain-name-servers 192.168.100.1;
    option routers 192.168.100.1;
    option broadcast-address 192.168.100.255;
    default-lease-time 600;
    max-lease-time 7200;
}


5.radvd の設定.
/etc/radvd.conf(新規作成)
------------------------------
interface br0
{
    AdvSendAdvert on;
    MinRtrAdvInterval 30;
    MaxRtrAdvInterval 100;
    prefix fd00:0:0:1::/64
    {
        AdvOnLink on; 
        AdvAutonomous on;
        AdvRouterAddr on;
    };
};


6.DNSサーバの設定.
/etc/dnsmasq.conf(以下の通り,修正)
------------------------------
(修正前)#domain-needed
          #bougus-priv
(修正後)domain-needed  (コメントを外す)
          bougus-priv    (コメントを外す)

/etc/hosts(適宜,追記)
------------------------------
192.168.100.XX hoge
192.168.100.XX piyo
192.168.100.XX fuga


7.IPv4 / IPv6 のフォワーディングを有効化.
/etc/sysctl.conf(以下の通り,修正)
------------------------------
(修正前)#net.ipv4.ip_forward=1
     #net.ipv6.conf.all.forwarding=1
(修正後)net.ipv4.ip_forward=1
     net.ipv6.conf.all.forwarding=1


8.iptables / ip6tablesの設定.
(以下のコマンドを実行)
------------------------------
 # iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j MASQUERADE
 # ip6tables -t nat -A POSTROUTING -s fd00:0:0:1::/64 -o eth1 -j MASQUERADE

(以下のコマンドを実行.2行目以降はteeコマンドによる標準出力)
------------------------------
 # iptables-save | tee /etc/iptables.settings
 # Generated by xtables-save v1.8.2 on Sat Dec  7 00:31:50 2019
 *nat
 :PREROUTING ACCEPT [0:0]
 :INPUT ACCEPT [0:0]
 :POSTROUTING ACCEPT [0:0]
 :OUTPUT ACCEPT [0:0]
 -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j MASQUERADE
 COMMIT
 # Completed on Sat Dec  7 00:31:50 2019

(以下のコマンドを実行.2行目以降はteeコマンドによる標準出力)
------------------------------
 # ip6tables-save | tee /etc/ip6tables.settings
 # Generated by xtables-save v1.8.2 on Fri Jul 24 09:08:36 2020
 *nat
 :PREROUTING ACCEPT [64:6182]
 :INPUT ACCEPT [6:1518]
 :POSTROUTING ACCEPT [7:649]
 :OUTPUT ACCEPT [13:1225]
 -A POSTROUTING -s fd00:0:0:1::/64 -o eth1 -j MASQUERADE
 COMMIT
 # Completed on Fri Jul 24 09:08:36 2020

/etc/rc.local(追記)
------------------------------
/sbin/iptables-restore  /etc/iptables.settings  && printf "[  OK  ] IPv4 Tables Restore : Success\n"
/sbin/ip6tables-restore /etc/ip6tables.settings && printf "[  OK  ] IPv6 Tables Restore : Success\n"


9.各設定を起動時に自動的に読み込めるよう以下の通り,systemd の設定を変更する.
(以下のコマンドを実行)
------------------------------
 # systemctl unmask hostapd.service
 # systemctl enable hostapd.service
 # systemctl enable hostapd2.service
 # systemctl enable isc-dhcp-server.service
 # systemctl enable dnsmasq.service
 # systemctl enable radvd.service


10.DHCPサーバのバグ対応(起動後に時間を空けて,デーモンを再起動する)

【2020年7月14日修正】
sleep 5で足りないことがあったため,whileループで成功するまで無限にリスタートするように修正した.
その際,成功タイミングを確認できるようログも出力するように改良した.

 /etc/rc.local(追記)
------------------------------
while true ; do
  sleep 5
  systemctl restart isc-dhcp-server && break
  printf "[  NG  ] Restart ISC-DHCP-SERVER : Failure\n"
done

printf "[  OK  ] Restart ISC-DHCP-SERVER : Success\n"


11.無線LANアダプタのPower Managementを無効にする.【2020年8月2日追記】
Power Managementが有効になっていると,作成したアクセスポイントが不安定になるため無効化する.
/etc/rc.local(追記)
------------------------------
sudo /sbin/iw dev wlan0 set power_save off
printf "[  OK  ] Power Management : Off\n"


12.再起動して,設定を反映する.

以上.

0 件のコメント:

コメントを投稿