Tailscaleのサブネットルーター機能を利用する

LAN内で、Tailscaleをインストールしていないほかのデバイスにもアクセスするには、Tailscaleのサブネットルータ機能が利用出来ます。これはLXDで沢山のコンテナを立ててテストしたい時にも有効です。
ここではTailscaleを利用して、複数のLXDコンテナへ外部からアクセスする方法を紹介します。

前提条件

  • Tailscaleアカウントを持っていること
  • コンテナ内にTailscaleが既にインストール済みであること
  • ホスト側でLXDコマンドが実行できること

コンテナにTUN設定を追加

まず、1つのLXDコンテナ内にTailscaleをインストールします。さらにTUNデバイスが必要となるので、一旦コンテナを終了したあと、ホスト側でコンテナに対して次のコマンドを実行します。

# TUNデバイスをdeviceとして追加
lxc config device add コンテナ名 tun unix-char path=/dev/net/tun

# mount.entryをraw.lxcで追加
lxc config set コンテナ名 raw.lxc "lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file"

LXD-UIで見るとこんな感じですね。

コンテナ内でTailscaleをサブネットルータとして起動

設定後、コンテナを再起動してから、まずはIPフォワーディングを有効化します。ちなみにLXD内ではsudoは不要ですが、色々な環境を想定して。

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

続いて、サブネットルータの設定を行います。

# LXDのコンテナネットワーク帯域を確認
ip route

# サブネットルータとして動作することを依頼(例:LXDのブリッジが10.80.23.0/24の場合)
sudo tailscale up --accept-routes --advertise-routes=10.80.23.0/24

既存設定がある場合はエラーになることがあります。その場合は–resetを追加して実施します。
sudo tailscale up --accept-routes --advertise-routes=10.80.23.0/24 --reset

Tailscale管理画面でルートを承認

Tailscaleの管理画面(admin.tailscale.com/machines )を開きます。対象のマシンに「Subnets」アイコンが表示されているはずです。

そのマシン名をクリックして、Subnets項目で「Edit」を押して、依頼されているサブネット(今回の例では10.80.23.0/24 )を承認(チェックをつけて)保存します。

これで完了です。ほかのTailnetクライアントからping(ping 10.80.23.xxなど)して、通じているか確認してみましょう。

UDP GRO設定(パフォーマンス改善)

UDPのパフォーマンスを改善する設定を施しておきましょう。コンテナ内で以下のコマンドを実行します。

sudo apt install ethtool
sudo ethtool -K eth0 rx-udp-gro-forwarding on rx-gro-list off

この設定は再起動すると消えてしまうので、/etc/networkd-dispatcher/routable.d/ にスクリプトを置いて永続化します。

sudo tee /etc/networkd-dispatcher/routable.d/50-tailscale << 'EOF'
#!/bin/sh
ethtool -K eth0 rx-udp-gro-forwarding on rx-gro-list off
EOF
sudo chmod +x /etc/networkd-dispatcher/routable.d/50-tailscale

タイトルとURLをコピーしました