y0ngb1n

Aben Blog

欢迎来到我的技术小黑屋ヾ(◍°∇°◍)ノ゙
github

ASUS RT-AC86U Asuswrt-Merlin に Tailscale をインストール

8c7218e4c00128101961ec00a97218d61347f5ba-1281x560

Asuswrt-Merlin ファームウェアのインストール#

ルーターを壊す心配はありません。ASUS のルーターはワンクリックで元に戻すことができます。

1)ファームウェアのダウンロード

まず、https://www.asuswrt-merlin.net/download から適切なファームウェアをダウンロードし、解凍します。(現在の最新 RT-AC86U_386.13_2.zip

2)ファームウェアのアップグレード

ルーターの管理画面 http://192.168.50.1/ にログインし、 システム管理 > ファームウェアアップグレード でファームウェアファイル(例: RT-AC86U_386.13_2_ubi.w)をアップロードします。

3)JFFS パーティションの有効化

システム管理 > システム設定 > Persistent JFFS2 partition

  • 次回起動時にJFFSパーティションをフォーマット - いいえ
  • JFFSカスタムスクリプトと設定を有効にする - はい

4)SSH ログインの有効化

システム管理 > システム設定 > SSHデーモン

  • SSHパスワードログインを許可 - はい

システムパーティションの説明#

admin@RT-AC86U-67A0:/tmp/home/root# df -h
Filesystem                Size      Used Available Use% Mounted on
ubi:rootfs_ubifs         77.2M     67.1M     10.0M  87% /
devtmpfs                207.9M         0    207.9M   0% /dev
tmpfs                   208.0M    300.0K    207.7M   0% /var
tmpfs                   208.0M     16.2M    191.8M   8% /tmp/mnt
mtd:bootfs                4.4M      3.3M      1.1M  75% /bootfs
tmpfs                   208.0M     16.2M    191.8M   8% /tmp/mnt
mtd:data                  8.0M    592.0K      7.4M   7% /data
tmpfs                   208.0M     16.2M    191.8M   8% /tmp
/dev/mtdblock9           47.0M     34.2M     12.8M  73% /jffs
  • /tmp は空き容量が大きく、デバイス再起動後にクリアされるため、一時的なファイルのダウンロードに使用できます。
  • /jffs は空き容量が少なく、デバイス再起動後も保持されるため、設定ファイルやインストーラー(制限あり)の保存に使用できます。

現在の新しいバージョンの tailscale_1.68.2_arm64.tgztailscale 15.4Mtailscaled 31.1M の 2 つのコア実行ファイルを解放します。しかし、 /jffs の空き容量が限られているため、 tailscaletailscaled を収容できません。 /tmp パーティションを利用して実行可能ファイルを保持することができます(使用時に実行可能ファイルをダウンロードするために adyanth/openwrt-tailscale-enabler を参照)。

安定した使用体験を得るために、私は tailscaled/jffs/tailscale/tailscaled にインストールし、 tailscale はあまり使用しないため、使用時に /tmp/tailscale にダウンロードすることを計画しています。

Tailscale のインストール#

/jffs/tailscale/tailscale

#!/bin/sh

# https://github.com/adyanth/openwrt-tailscale-enabler/blob/main/usr/bin/tailscale

set -e

if [ ! -f /tmp/tailscaled ]; then
    arch=`uname -m`
    if [ "$arch" == "mips" ]; then
        endianness=`echo -n I | hexdump -o | awk '{ print (substr($2,6,1)=="1") ? "le" : ""; exit }'`
    elif [ "$arch" == "armv7l" ]; then
        arch=arm
    elif [ "$arch" == "aarch64" ]; then
        arch=arm64
    elif [ "$arch" == "x86_64" ]; then
        arch=amd64
    fi

    tailscale_version="1.68.2"

    latest_version=`wget -O- https://pkgs.tailscale.com/stable/ | grep tailscale_ | head -1 | cut -d'_' -f 2`
    if [ "$tailscale_version" != "$latest_version" ]; then
        tailscale_version=$latest_version
    fi

    version="${tailscale_version}_${arch}${endianness}"

    echo "Tailscale ${version} をダウンロード中 .."

    echo -e "tailscale_${version}/tailscaled" > /tmp/tailscale_${version}_files.txt

    wget -O- https://pkgs.tailscale.com/stable/tailscale_${version}.tgz | tar x -zvf - -C /tmp -T /tmp/tailscale_${version}_files.txt

    mv /tmp/tailscale_$version/* /tmp
    rm -rf /tmp/tailscale_${version}*

    echo "完了!"
fi

/tmp/tailscaled "$@"

/jffs/tailscale/tailscaled-startup.sh

#!/bin/sh

tailscaled_pid=`pidof tailscaled`
if [ -z "$tailscaled_pid" ]
then
  modprobe tun
  nohup /jffs/tailscale/tailscaled --no-logs-no-support --state=/jffs/tailscale/tailscaled.state --statedir=/jffs/tailscale >/dev/null 2>&1 & 
else
  echo "tailscaled (pid:$tailscaled_pid) は実行中です..."
fi

if [ -x /opt/bin/tailscale ]; then tailscale down; tailscale up; fi

/bin/sh /jffs/tailscale/tailscale-nat-setup.sh

上記のスクリプトを利用して /tmp/tailscale/tmp/tailscaled をダウンロードし、手動で tailscaled/jffs/tailscale/tailscaled に固定します。

mkdir -p /jffs/tailscale
chmod +x /jffs/tailscale/tailscale /jffs/tailscale/tailscaled-startup.sh
/jffs/tailscale/tailscale # ダウンロード

mv /tmp/tailscaled /jffs/tailscale/tailscaled
/jffs/tailscale/tailscaled-startup.sh # tailscaledを起動
/jffs/tailscale/tailscale up
# /jffs/tailscale/tailscale set ...

自動起動の設定#

Asuswrt-Merlin は私たちにさまざまなイベントの実行ポイントを提供しています、例えば:

  • wan-start
  • firewall-start
  • nat-start
  • init-start
  • ...

これらのイベントの実行スクリプトを利用して、さまざまな機能を拡張することができます。例えば、私たちの tailscale 自動起動機能を実現することができます:

/jffs/scripts/nat-start

#!/bin/sh

modprobe tun
/bin/sh /jffs/tailscale/tailscale-nat-setup.sh

/jffs/scripts/firewall-start

#!/bin/sh

/bin/sh /jffs/tailscale/tailscaled-startup.sh

/jffs/tailscale/tailscale-nat-setup.sh

#!/bin/sh
# https://www.snbforums.com/threads/a-guide-about-installing-zerotier-on-asus-ac68u-router.42648/
logger -t "custom iptables" "Enter" -p user.notice
if ! iptables -C INPUT -i tailscale0 -j ACCEPT ; then
    # tailscale nat
    iptables -I INPUT -i tailscale0 -j ACCEPT
    iptables -I FORWARD -i tailscale0 -j ACCEPT
    iptables -I FORWARD -o tailscale0 -j ACCEPT
    iptables -t nat -I POSTROUTING -o tailscale0 -j MASQUERADE
    logger -t "custom iptables" "ルールが追加されました" -p user.notice
else
    logger -t "custom iptables" "ルールが存在するためスキップ" -p user.notice
fi

参考リンク#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。