0
0

WZR-HP-AG300H + OpenWrt + Tailscaleによる安全な通信網確保

Last updated at Posted at 2024-09-18

はじめに

もともとバッファロールータ(WZR-HP-AG300H)にTailscaleを導入し、出張先などで自宅VPNにつなげて快適で安全なネットサーフィンを楽しんでいました。最近安くWZR-HP-AG300Hを仕入れたこと&今週家族旅行に行くので、ホテル先でも自宅のようにネットサーフィンを楽しんでほしいと思い、最新のOpenWrtとTailscaleを導入しておこうかなと思ったのがきっかけです。

以前はサクッと導入できたのですが、最新になると色々知らなかったことが分かったのでメモとして残します。

ハマったこと&今後気を付けること

  1. (基本)WZR-HP-AG300HのFirmwareをOpenWrtに書き換えた後は無線LANは有効になっていないので、有線LANケーブル必須
  2. 有線LANのIPを変更しリブートした後、物理的に有線LANケーブルを抜きさしする
  3. Tailscaleをインストールする際、最新のOpenWrt(OpenWrt23.03~)の場合は以下のモジュールが必要
    • iptables-nft
  4. GUIからTailscaleをインストールを実行した結果、opkg install SyntaxError: Unexpected end of JSON inputというエラーがでてインストールできない場合は一度リブートしてSSHからインストールする
opkg update
opkg install tailscale
opkg install iptables-nft
reboot
  1. 最新の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)
0
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0