2023-12-17

GL-AXT1800 を AP モードで IPv6 有効化し、tailscale も IPv6 有効化【2023-12-21 追記】

 

 

【2023-12-21 追記】再起動で tailscale が停止状態

 

 AP モードで再起動すると tailscale が停止状態になります。

 

 これを起動状態にするには、/usr/bin/gl_tailscale の 63〜66 行をコメント
 アウトします。


 これらの行はルーターモード以外の場合、tailscale を停止するスクリプトに
 なっていますので、これをコメントアウトすることで停止されなくなります。

 

  #    if [ "$sys_mode" != "router" ]; then
  #        /etc/init.d/tailscale stop
  #        exit 0
  #    fi

 なぜ、AP モード時にわざわざ停止する必要があるのかがわかりません。

 

 GL.iNet 社はなぜこのような仕様にしているのでしょうか。

ーーーーー・ーーーーー・ーーーーー・ーーーーー


 

 

OpenWrt は tailscale の Exit Node で IPv6 が使えないようです

 

 

上記 2023-10-21 記事で、下記の記載をしました。

 

Exit Node で IPv6 パケットがルーティングされない、というのは、いろいろググってみましたが、tailscale の問題というよりも、 OpenWrt の問題のようです。

 

GitHub#6677 に OpenWrt の Exit Node で IPv6 パケットがルーティングできない、とバグレポートされていますが、

 

GitHub#6252 で、

 

OpenWRT: IPv6 exit node cannot route exit packets due to OpenWRT policy rules #6677 

 

に、OpenWrt のポリシールールにより IPv6 Exit Node パケットをルーティングできない、とあります。

 

 

ところが GL-AXT1800 の場合 AP モードでは IPv6 のルーティングされませんが、ルーターモードではルーティングされます。

 

ルーターモードでは IPv6 アドレスが付与されますが、AP モードでは IPv6 アドレスが付与されません。

 

IPv6 アドレス設定する方法をいろいろ試すのですができません。

 

 

 

ルーターモードでできるのですから、AP モードでも何か手があるはずだ、とその後も調べていました。

 

 

最終的に参考になったのは GL.iNet フォーラムの下記 URL の情報です。

 

Network Mode: Access Point: Web server via IPv6?

 

 

これまでは以下のように ping6ping6: sendto: Network unreachable というエラーになっていました。


root@GL-AXT1800:~# ping6 2404:6800:4004:823::200e
PING 2404:6800:4004:823::200e (2404:6800:4004:823::200e): 56 data bytes
ping6: sendto: Network unreachable
root@GL-AXT1800:~#

 

最初は DNS で IPv6 の名前解決ができないためかと考え、DNS を引かないように直接 IPv6 アドレス指定してもエラーになるのです。

 

IPv6 DNS 問題ではありませんでした。

 

 

このエラーは AXT1800 が IPv6 アドレスを持たないことに起因していたのです。

 

 


そこでまず uci コマンドで IPv6 関連の設定してみましたが、ping6 がエラー状態は変わりません。

 

root@GL-AXT1800:~# uci set network.lan.ip6assign='0'  :①
root@GL-AXT1800:~# uci set network.lan.ipv6='1'    :②
root@GL-AXT1800:~# uci commit network
root@GL-AXT1800:~# service network restart
root@GL-AXT1800:~# ping6 2404:6800:4004:823::200e
PING 2404:6800:4004:823::200e (2404:6800:4004:823::200e): 56 data bytes
ping6: sendto: Network unreachable
root@GL-AXT1800:~#


は ula-prefix を無効にするとあります。

はデフォルト値 'auto' では odhcp6c[…] がパーミッションエラーで失敗するのを防ぐ、とあります。


これだけでは IPv6 が有効にはなりません。

 

 

次に /etc/config/network に以下の行を追加してみました。

 config interface 'lan6'
     option proto 'dhcpv6'
     option reqprefix 'no'
     option ifname '@lan'


これにより、ネットワークインタフェースに LAN6 ができます。


この LAN6 に IPv6 が割り当たれば OK ですが、これだけではまだ IPv6 が割り当たりません。



参考サイトにあるように /etc/sysctl.conf に次の2行を追加し、sysctl -p で設定を反映させます。

 

 net.ipv6.conf.br-lan.forwarding = 0
 net.ipv6.conf.br-lan.accept_ra = 1


ですが、これだけでは IPv6 は割り当たりません。

 

 

まだ何か足りません。

 

 

そこで「/etc/sysctl.conf ipv6」でネット検索して Quiita に「IPv6 無効化設定」というのを見つけました。

 

ならばその設定の逆をすれば「IPv6 有効化設定」ではないか、と。

 

 

ビンゴ!

 

 

Qiita では「無効化」の場合、次のようにするとあります。

 

 net.ipv6.conf.all.disable_ipv6 = 1
 net.ipv6.conf.default.disable_ipv6 = 1
 

 

なのでこれらを 0 にすれば「有効化」になるはずです。

 

 net.ipv6.conf.all.disable_ipv6 = 0
 net.ipv6.conf.default.disable_ipv6 = 0

 

を追加して sysctl -p で反映させると IPv6 が割り当たりました。

 

最後の行 'net.ipv6.conf.default.disable_ipv6' はデフォルトが 0 のようなので、あえて追加する必要はないようです。

 

 


ip addr で IP 割り当て状況を確認すると br-lan インタフェースと tailscale0 インタフェースに IPv6 が割り当たっています。

 




下記のように ping6 が通るようになりました。


root@GL-AXT1800:~# ping6 2404:6800:4004:823::200e
PING 2404:6800:4004:823::200e (2404:6800:4004:823::200e): 56 data bytes
64 bytes from 2404:6800:4004:823::200e: seq=0 ttl=115 time=6.855 ms
64 bytes from 2404:6800:4004:823::200e: seq=1 ttl=115 time=5.830 ms
64 bytes from 2404:6800:4004:823::200e: seq=2 ttl=115 time=5.508 ms
64 bytes from 2404:6800:4004:823::200e: seq=3 ttl=115 time=5.161 ms
^C
--- 2404:6800:4004:823::200e ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 5.161/5.838/6.855 ms
root@GL-AXT1800:~#



DNS で名前解決して通るようにもなりました。


root@GL-AXT1800:~# ping6 google.com
PING google.com (2404:6800:4004:80f::200e): 56 data bytes
64 bytes from 2404:6800:4004:80f::200e: seq=0 ttl=114 time=10.355 ms
64 bytes from 2404:6800:4004:80f::200e: seq=1 ttl=114 time=5.161 ms
64 bytes from 2404:6800:4004:80f::200e: seq=2 ttl=114 time=4.838 ms
64 bytes from 2404:6800:4004:80f::200e: seq=3 ttl=114 time=5.199 ms
64 bytes from 2404:6800:4004:80f::200e: seq=4 ttl=114 time=4.866 ms
64 bytes from 2404:6800:4004:80f::200e: seq=5 ttl=114 time=5.232 ms
^C
--- google.com ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 4.838/5.941/10.355 ms
root@GL-AXT1800:~#

 

 

このときの AXT1800 の【ネットワーク】→【インタフェース】は以下のようになり、LAN6 インタフェースが IPv6 アドレスを得ているのがわかります。

 




DNS を tailscale の DNS:100.100.100.100 にすることで、Exit Node が機能します。

 

root@GL-AXT1800:~# tailscale set --accept-dns=true
 

 

スマホを使って Exit Node 経由で IPv6 サイトをアクセスしてみました。

 

 

まずは tailscale で Use exit node を設定します。

下図のように gl-axt1800 が exit node を引き受けています。





この状態で test-ipv6.com をアクセスしてみます。

 




IPv6 で
10/10 になっっています。


次に、IIJmio サイトをアクセスして IPv6 かどうかを確認します。

 

 CONNECTED  via IPv6  と表示されており、IPv6 でアクセスしていることがわかります。

 

 

 

以上のように、GL.iNet:AP モードで IPv6 有効化を行うことで、tailscale も IPv6 対応できることが確認できました。

 

 

喉に刺さった小骨がやっと取れた感じでスッキリです。

 

 

 

 




0 件のコメント: