【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?
これまでは以下のように ping6 が ping6: 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 件のコメント:
コメントを投稿