UniFi Security GatewayでDS-Lite
実売2万6000円のIPS/IDS付きエッジルーター、Ubiquiti「UniFi Security Gateway(USG)」【イニシャルB】 - INTERNET Watchを見て、UniFi Security Gatewayの中身はEdgeOSなので簡単にDS-Liteできるなと思って買ったのですが、色々大変だったので、メモ。
やること
環境
- UniFi Security Gateway
- UniFi nano HD
コントローラーはRaspberry Piに公式のdebパッケージを入れています。上流はひかり電話ルーター(ホームゲートウェイ)です。
設定
初期セットアップ
コントローラーに接続し、通常通りセットアップを進めます。このとき一回HGW側でPPPoEセッション等を貼ってDHCPでもらったIPアドレスでインターネットに出れるようにしておくと楽だと思います。UniFiは自動で192.168.1.0/24を使うので、セットアップ後にLAN側の設定をずらすか、HGWのセグメントをずらすしておくと楽です。
WAN側の設定を開き、IPv6 Connection TypeをUsing DHCPv6にします。Prefix Delegation Sizeは60です。(ひかり電話ルーターの場合)
SSHの有効化
SSHを有効にします。SSHは、Network Settingsの中のDevice Authenticationにあります。
コンソールでの設定
しばらく待ってからSSHに接続し、ip a
などでeth1に振られたv6アドレスを記録しておきます。あとは、show ipv6 neighbors
でHGWのIPv6アドレスを確認します。
あとは、以下のようにconfigure
の中で設定します。
set interfaces ethernet eth0 address [IPv6アドレス]/64 set protocols static route6 ::/0 next-hop [HGWのIPv6アドレス] set interfaces ipv6-tunnel v6tun0 encapsulation ipip6 set interfaces ipv6-tunnel v6tun0 local-ip [IPv6アドレス] set interfaces ipv6-tunnel v6tun0 remote-ip [transixのAFTR] set interfaces ipv6-tunnel v6tun0 mtu 1500 set interfaces ipv6-tunnel v6tun0 multicast disable set interfaces ipv6-tunnel v6tun0 ttl 64 set protocols static interface-route 0.0.0.0/1 next-hop-interface v6tun0 set protocols static interface-route 128.0.0.0/1 next-hop-interface v6tun0
既出のImpress Watchの記事と違うのはルーティングのところになります。UniFi Security Gatewayでは、0.0.0.0/0
を上手く認識しないバグ(もしくは仕様)があり、0.0.0.0/0
を宛先にできないので、0.0.0.0/1
と128.0.0.0/1
を組み合わせて0.0.0.0/0
を表現する必要があります。これで無限に時間を溶かしました。(というか、これはUniFiユーザーに教えてもらいました。ありがとうございます。)
参考: adding default route 0.0.0.0 0.0.0.0 on Unifi with USG impossible | Ubiquiti Community
JSONへの書き出し
これでDS-Liteで使えますが、commitしてsaveした場合でも、UniFi Controllerが次にプロビジョニングするとコマンドでの設定は消えてしまいます。そのため、以下のようなJSONをconfig.gateway.jsonとして保存します。場所はUniFi Controllerのデプロイ方法によりけりですが、公式debパッケージの場合、/var/lib/unifi/sites/default/config.gateway.json
です。(sites/以下はないので作成します。サイト名も適宜default以外に変更してください。)
{ "interfaces": { "ethernet": { "eth0": { "address": [ "dhcp", "[IPv6アドレス]/64" ] } }, "ipv6-tunnel": { "v6tun0": { "encapsulation": "ipip6", "local-ip": "[IPv6アドレス]", "mtu": "1454", "multicast": "disable", "remote-ip": "[transixのAFTR]", "ttl": "64" } } }, "protocols": { "static": { "route6": { "::/0": { "next-hop": { "[HGWのIPv6アドレス]": { "interface": "eth0" } } } }, "interface-route": { "0.0.0.0/1": { "next-hop-interface": { "v6tun0": "''" } }, "128.0.0.0/1": { "next-hop-interface": { "v6tun0": "''" } } } } } }
これで、USGでもIPv4 over IPv6 + IPv6環境が手に入ります。
最後に
この設定で接続できますが、自分の環境では上手くDPIが動作しませんでした。またUniFi Security Gatewayの動作が不安定になるかもしれないことも確認しています。(2時間おきに再起動したりしました、初期化で安定しました)
GUI以上のことをしようとするとなかなかハマりますね。また検証してみて、最適なUniFi生活をやっていこうと思います。