はじめに
もともとバッファロールータ(WZR-HP-AG300H)にTailscaleを導入し、出張先などで自宅VPNにつなげて快適で安全なネットサーフィンを楽しんでいました。最近安くWZR-HP-AG300Hを仕入れたこと&今週家族旅行に行くので、ホテル先でも自宅のようにネットサーフィンを楽しんでほしいと思い、最新のOpenWrtとTailscaleを導入しておこうかなと思ったのがきっかけです。
以前はサクッと導入できたのですが、最新になると色々知らなかったことが分かったのでメモとして残します。
ハマったこと&今後気を付けること
- (基本)WZR-HP-AG300HのFirmwareをOpenWrtに書き換えた後は無線LANは有効になっていないので、有線LANケーブル必須
- 有線LANのIPを変更しリブートした後、物理的に有線LANケーブルを抜きさしする
- Tailscaleをインストールする際、最新のOpenWrt(OpenWrt23.03~)の場合は以下のモジュールが必要
- iptables-nft
- GUIからTailscaleをインストールを実行した結果、
opkg install SyntaxError: Unexpected end of JSON input
というエラーがでてインストールできない場合は一度リブートしてSSHからインストールする
opkg update
opkg install tailscale
opkg install iptables-nft
reboot
- 最新のTailscaleを導入すると/root以下がパンパンになってファイルシステムが強制的にRead-Onlyになってしまう。そしてなぜかremountできない。つまり、最新のTailscaleを導入するには、OpenWrtを初期化してからTailscaleインストール→Tailscaleを最新にするという手順が必要
最新Tailscaleの導入方法
以下の記事を参考に入れてみました。
しかし、WZR-HP-AG300Hの容量は十分でないため、一度に解凍できないことがわかりました。そのため、↓のようにコードを修正し、tarの中で必要なものだけを解凍→コピー→削除という処理に変更することで対応しました。
コメントアウトしているところが修正部分です。
#!/bin/ash
arch=arm64
start_opt="--accept-routes --advertise-exit-node --advertise-routes=192.168.1.0/24 --netfilter-mode=off --stateful-filtering"
check() {
local net_ver
net_ver=$1
if curl -s --head https://pkgs.tailscale.com/stable/tailscale_"$net_ver"_"$arch".tgz | grep -q 'HTTP/.* 200'; then
echo true
else
echo false
fi
}
uninstall() {
echo
echo Uninstalling...
tailscale down
service tailscale stop
rm /usr/sbin/tailscale /usr/sbin/tailscaled
echo Uninstall done!
}
update() {
local net_ver
net_ver=$1
echo
echo Downloading Tailscale $net_ver...
curl -L https://pkgs.tailscale.com/stable/tailscale_"$net_ver"_$arch.tgz \
-o /tmp/tailscale_"$net_ver"_$arch.tgz
echo
echo Extracting and Installing...
#tar x -zvf /tmp/tailscale_"$net_ver"_$arch.tgz -C /tmp
#rm /tmp/tailscale_"$net_ver"_$arch.tgz
tar zfx /tmp/tailscale_"$net_ver"_$arch.tgz tailscale_"$net_ver"_$arch/tailscale -C /tmp
cp /tmp/tailscale_"$net_ver"_$arch/tailscale /usr/sbin
rm -r /tmp/tailscale_"$net_ver"_$arch
tar zfx /tmp/tailscale_"$net_ver"_$arch.tgz tailscale_"$net_ver"_$arch/tailscaled -C /tmp
cp /tmp/tailscale_"$net_ver"_$arch/tailscaled /usr/sbin
rm -r /tmp/tailscale_"$net_ver"_$arch
#echo
#echo Installing...
#cp /tmp/tailscale_"$net_ver"_$arch/tailscale \
#/tmp/tailscale_"$net_ver"_$arch/tailscaled \
#/usr/sbin
#rm -r /tmp/tailscale_"$net_ver"_$arch
rm /tmp/tailscale_"$net_ver"_$arch.tgz
echo Install done!
}
start() {
echo
echo Service starting...
service tailscale start
tailscale up $start_opt
}
main() {
local local_ver net_ver DL
local_ver=$(tailscale version | sed -n 1p)
echo
echo Current version: $local_ver
net_ver=$(curl -s https://api.github.com/repos/tailscale/tailscale/releases | awk '/"name":/ { print $2 }' | head -1 | sed -e 's/[^0-9.]//g')
echo Latest version: $net_ver
if [[ $local_ver != $net_ver ]]; then
echo Found new release!
echo
echo Checking downloadable...
DL=$(check $net_ver)
echo Downloadable: $DL
if [[ $DL == true ]]; then
uninstall
update $net_ver
start
echo
echo Update Complete!
echo
else
echo
echo Can\'t download latest version.
echo
fi
else
echo
echo Already installed latest version!
echo
fi
}
main
出張先から常に自宅からのアクセスにしたい場合
まぁ、よくある話ですが、例えばアメリカに出張して、Amazon Prime Videoとかアメリカでアクセスしちゃうと日本側にいる家族が「あれ?」ってなっちゃうやつですね(遭遇したことがないのでどういう状況なのかわからないけど、利用できなくなる感じを訴えられた)。なので、アメリカから日本(自宅)を経由してAmazon Prive Videoにアクセスしたい場合などの話です。
やり方は簡単で、Tailscaleクライアントであるルータから自宅のTailscaleのExit Nodeを利用する設定にするだけです。具体的には、ルータにSSH接続して、↓のコマンドを打つだけです。注意点はすでにExit Nodeとして設定していた場合、↓のようなExit Nodeを利用する設定はできないのでご注意ください。()内の'--exit-node-allow-lan-access=true'は自身の環境に合わせて設定してください。
tailscale set --exit-node=<IP | Host name> (--exit-node-allow-lan-access=true)
ホテルでの使用感
旅行中のホテルでの使用感です。結論はとりあえず持って行っておくのが無難です。
ホテルでの問題点
Wifiが主流になったことなのかどうかわからないですが、以下の問題が発生。
- ホテル側Wifiつながりにくい
- やっとつながってもブチブチ接続が切れる
対策
「自前ルータ→有線LAN接続」にしてホテルWifiを経由しない
これによって、昨今有線LANを利用する人が少ないのか、とっても快適なインターネット利用(主に娘のYoutube)ができました。
所感
これまではここまで劣悪な環境はなかったので、自前ルーターの恩恵はほんの一部でした。なのでセキュリティ目的や自宅ファイルサーバへの接続など以外での利用は無用の長物感がありましたが、今回の家族旅行では上記問題があったので、こういったリスク回避に役立つなぁ~って思いました。
ちなみにKindle FireからOpenWrtの2.4GHz帯域に接続しようと思ったところ、まったくWifiのネットワーク検索に引っかからなかったので、もしかしてOpenWrtの設定の問題かな?というところで悩んだ結果、↓の記事があったので6チャネルに設定したらKindle FireからSSIDがキャッチできるようになりました。
以前こんなに見えなかったかな?dd-wrt自体はってどうだったかなぁ~などと思いつつ、とりあえず解決策があったので良かったです。