ページ

2021年3月7日日曜日

Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする

光回線の契約をソフトバンク光から楽天ひかりに乗り換えた.(一年無料なので,ソフトバンクに解約金を払っても十分にお釣りが来る.)

ソフトバンク時代は,IPv4 over IPv6を利用するのに光BBユニットのレンタルが必須だったが,楽天ひかりでは対応したルーターを用いれば専用機器をレンタルする必要はないので,Raspberry PiをDS-Lite・Xpassに対応させてルーターとして可動させた.

同時に,DHCP,RADVD,DNS,さらに,2.4GHz帯/5.0GHz帯のマルチSSD無線LANとしても可動させているので,その設定手順を備忘録として記録する.

最終構成は以下の通り.
 eth0   :ラズパイにある有線LANポート.スイッチングハブと接続する.
 eth1   :USB-NICで拡張した有線LANポート.ONUと接続する.
 wlan0  :ラズパイにある無線LANポート.5.0GHz 帯無線LANアクセスポイントとして動作させる.
 wlan1  :USBドングルで拡張した無線LANポート.2.4GHz 帯無線LANアクセスポイントとして動作させる.
 br0    :eth0,wlan0,wlan1をつなぐブリッジ.192.168.100.1/24に設定する.
 ds-lite:IPv4 over IPv6用のトンネル.

 br0 に DPCP及びRADVD を設定し,接続した機器には自動でIPv4アドレス及びIPv6アドレスを振るように設定.


ブリッジ(br0)の設定


1. パッケージのインストール
 $ sudo apt install bridge-utils

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

3. DHCPクライアントの設定
eth0,wlan0,wlan1にはIPを振らないように,またbr0は固定IPに設定する
/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 2001:4860:4860::8888 2001:4860:4860::8844


DHCPの設定


1. パッケージのインストールと自動起動設定
 $ sudo apt install isc-dhcp-server
 $ sudo systemctl enable isc-dhcp-server.service

2. DHCPを提供するデバイスの設定
/etc/default/isc-dhcp-server(以下の通り,修正)
------------------------------
(修正前)INTERFACESv4=""
(修正後)INTERFACESv4="br0"

3. confファイルの設定
提供するIPv4アドレスの範囲等の設定
/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.120;
  option domain-name-servers 192.168.100.1;
  option domain-name "hoge.piyo"; # 必要ならドメインネームを記載する
  option routers 192.168.100.1;
  option broadcast-address 192.168.100.255;
  default-lease-time 600;
  max-lease-time 7200;
}
host fuga { # 固定IPを振りたい場合は,MACアドレスとIPアドレスを記載する
  hardware ethernet AA:BB:CC:DD:EE:FF;
  fixed-address 192.168.100.10;
}

4. バグ対応
デフォルトでは,(デバイスに対してIPが振られる前にDHCPを起動しようとするから?)DHCPの起動に失敗することがあるため,起動シーケンスの中で成功するまで再起動する設定を追記
 /etc/rc.local(追記)
------------------------------
for i in {1..10}; do
  systemctl restart isc-dhcp-server && break
  printf "[  NG  ] Restart ISC-DHCP-SERVER : Failure\n"
  sleep 5
done

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


RADVDの設定


1. パッケージのインストールと自動起動設定
 $ sudo apt install radvd
 $ sudo systemctl enable radvd.service

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


DNSの設定


1. パッケージのインストールと自動起動設定
 $ sudo apt install dnsmasq
 $ sudo systemctl enable dnsmasq.service

2. confファイルの設定
/etc/dnsmasq.conf(以下の通り,修正)
------------------------------
(修正前)#domain-needed
          #bougus-priv
(修正後)domain-needed  (コメントを外す)
          bougus-priv    (コメントを外す)

2. 名前解決したいホストとIPアドレスの設定
/etc/hosts(以下のように適宜,追記する)
------------------------------
192.168.100.10 fuga


IPv4 over IPv6(DS-Lite・Xpass)の設定


1. トンネルの作成
 /etc/rc.local(追記)
------------------------------
for i in {1..10}; do
  LOCAL=`ip a | grep 'mngtmpaddr' | awk '{print $2}' | awk -F/ '{print $1}'`
  [ -n "${LOCAL}" ] && break
  printf "[  NG  ] mngtmpaddr device is not found\n"
  sleep 5
done

printf "[  OK  ] mngtmpaddr device is found\n"

REMOTE='2001:f60:0:200::1:1'
ip -6 tunnel add ds-lite mode ipip6 remote $REMOTE local $LOCAL encaplimit none dev eth1
ip link set dev ds-lite up
ip route add default dev ds-lite


IPフォワーディングの設定

1. confファイルの設定
/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


NAT及びFireWallの設定


1. iptablesの設定(IPv4はトンネルに飛ばすので,NATは不要)
 /etc/iptables.settings(新規作成)
------------------------------
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -s 192.168.100.0/24 -i br0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.100.0/24 -i br0 -o ds-lite -j ACCEPT
-A FORWARD -d 192.168.100.0/24 -i ds-lite -o br0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT

2. ip6tablesの設定
 /etc/ip6tables.settings(新規作成)
------------------------------
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s fd00:0:0:1::/64 -o eth1 -j MASQUERADE
COMMIT

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -s fd00:0:0:1::/64 -i br0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s fd00:0:0:1::/64 -i br0 -o eth1 -j ACCEPT
-A FORWARD -d fd00:0:0:1::/64 -i eth1 -o br0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT

3. 起動時に読み込む設定
 /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"


ここまでの設定で,IPv4 over IPv6対応ルーターとして動作する.

ここからさらに無線LANルーターとして動作するための設定を追加していく.

5.0GHz帯無線LANの設定


1. パッケージのインストールと自動起動設定
 $ sudo apt install hostapd
 $ sudo systemctl unmask hostapd.service
 $ sudo systemctl enable hostapd.service

2. confファイルのパスの設定
/etc/default/hostapd(以下の通り,修正)
------------------------------
(修正前)#DAEMON_CONF=""
(修正後)DAEMON_CONF="/etc/hostapd/hostapd.conf"

3. 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


2.4GHz帯無線LANの設定


1. confファイル及びsystemd用のファイルを5.0GHzのものからコピー
(以下のコマンドを実行)
------------------------------
 # 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

2. 自動起動設定
 $ sudo systemctl enable hostapd2.service

3. confファイルの作成
/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


Power Managerの無効化


1. 起動時の設定
Power Managementが有効になっていると,作成したアクセスポイントが不安定になるため無効化する.
/etc/rc.local(追記)
------------------------------
/sbin/iw dev wlan0 set power_save off && printf "[  OK  ] Power Management : Off\n"

以上.

0 件のコメント:

コメントを投稿