1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Proxmox で早い安いうまい省電力の自宅 tailscale ノードを作成

Posted at

結論

2,000円で買える旧式ミニPCで、早い安いうまい省電力の自宅 tailscale コンテナを作成。
今日 Proxmox のコンテナを使い始めた初心者が、所用時間1時間で。
私のレベルは、Linux のインストールがどうにかできる程度で、VM関係の知識は皆無です。
PXL_20251031_004422456.MP.jpg

概要

ステップ1

Proxmox 導入機を選定、入手する。

・ Core2Duo 世代
・ 2015年ころの Celeron 級
・ もちろん、現代風の N100 ミニPCでもよい

今回は、ヤフオクで NEC US310e という機種が常に売っているので、それにしました
2014年製のCeleron N2930 4コア 4スレッド 1.8GHz-2.2GHz を搭載した、小型のデスクトップPCです。メモリは2GB、SATA-SSD16GBです。

非常に非力ですが省電力で、常時7Wで稼働してくれます。

ステップ2

Proxmox を導入します。
驚いたことに、メモリ2GBでもごく普通に入ります。

ステップ3

chatGPTに
「Proxmox コンテナで tailscale を使う手順を詳細に教えて」
「tailscale で、exit node を有効にする手順を詳細に教えて」
と聞きます。

提示される手順は、完全なステップバイステップではないので、順次エラーが出ます。
その都度、エラーメッセージを chatGPT にコピペすると、対応策を指示されるので、実施します。

ステップ4

というわけで、AI 任せなのですが、解説を読みながらコマンドをコピペするだけで、「なるほど・・・」という学びが多々ありました。

ステップ5

(AIが)まとめたので掲載します。
が、どうせエラーが出て中断するので、chatGPT に相談しながらやったほうが早いです。

「コンテナ作成からここまでの手順をステップバイステップで、詳細に整理して」

いいよ!🫶
US310e上で LXCコンテナを作成 → systemd/TUN 有効化 → Tailscale インストール → Exit Node 化(サブネット広告含む)→ 自動化 までやった流れを、最初から最後までステップバイステップで詳細に整理するね。
コマンド、設定ファイルの中身、確認方法、よくある躓きポイントとその対処まで全部書いてあるから、あとで読み返してそのまま使えるよ。

前提(今回の環境)

Proxmox ノード名:us310e(コマンドはこのノード上で実行)

作成するコンテナ:ID=201、hostname=tailscale-lxc

使用テンプレート:Debian 12 系(debian-12-standard)

家庭LAN サブネット:192.168.0.0/24(サブネット広告に使用)

目的:Tailscale Exit Node(家庭内を出口にする)&サブネットルート広告

想定のネットワークインターフェース名(コンテナ内):eth0(確認は ip addr)

目次(作業の流れ)

テンプレート準備(pveam)

LXC作成(pct create)

LXC設定修正(systemd と /dev/net/tun を使えるように)

コンテナ起動・systemd確認

/dev/net/tun の確認

Tailscale インストールと tailscaled 起動

IP フォワード有効化(恒久化)

NAT(MASQUERADE)設定(必要なら)

Exit Node & サブネット広告の実行

クライアント側での受け入れ設定(accept-routes)

自動化(systemd serviceで tailscale up を自動実行)

よくあるエラーと対処

  1. テンプレート準備(pveam)

テンプレがないと pct create が失敗するので最初に確認・ダウンロード。

テンプレ更新と一覧

pveam update
pveam available | grep debian

例:テンプレをローカルにダウンロード(出力された実名に置き換える)

pveam download local debian-12-standard_12.7-1_amd64.tar.zst

キャッシュ確認

ls -l /var/lib/vz/template/cache

躓きポイント:pct create で does not exist が出たらテンプレが無い。上の pveam download をやる。

  1. LXC コンテナ作成(テンプレ指定)

テンプレ指定でコンテナを作成。rootfs の指定は環境に合わせて調整。

pct create 201 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst
--hostname tailscale-lxc
--net0 name=eth0,bridge=vmbr0,ip=dhcp
--memory 512 --cores 1 --rootfs local-lvm:4
--unprivileged 1 --features nesting=1

local-lvm:4 を環境に合わせて(local:4 や local-zfs:4 等に変更)。

Thin pool 容量不足の警告が出ることがある → lvs/vgs で空き確認、不要VMやスナップ削除で対処。

確認:

pct list

よくあるエラー:

Logical volume ... created したあと does not exist:テンプレ不足やthin pool不足が原因。

  1. LXC設定修正(systemd + TUN を使えるように)

Tailscale は systemd と /dev/net/tun を使うのでホスト側で LXC 設定を追記する。

一旦停止して編集

pct stop 201
nano /etc/pve/lxc/201.conf

追記する内容(そのまま貼る)

enable nesting and keyctl

features: nesting=1,keyctl=1

allow /dev/net/tun

lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

AppArmor を無効化(必要なら)

lxc.apparmor.profile: unconfined

optional safety settings

lxc.cap.drop:
lxc.mount.auto: "proc:rw sys:rw"

保存してから再起動:

pct start 201

注意:lxc.apparmor.profile: unconfined と features: nesting=1 の併用は警告を出すことがあるが動作には問題ない。

  1. コンテナ起動・systemd確認

コンテナへ入って systemd が PID 1 かを確認。

pct exec 201 -- bash

コンテナ内で

ps -p 1 -o comm=

-> 出力が "systemd" ならOK

もし systemd でなければ、LXC設定の features や lxc.mount.auto の見直し。テンプレに systemd が入っていることも確認。

  1. /dev/net/tun の確認(コンテナ内)
    ls -l /dev/net/tun

期待: crw-rw-rw- 1 root root 10, 200 ...

存在しなければホスト側の lxc.mount.entry や lxc.cgroup2.devices.allow が正しくない。pct stop/start をやり直す。

  1. Tailscale インストールと tailscaled 起動(コンテナ内)

コンテナ内で以下を実行。

インストール

curl -fsSL https://tailscale.com/install.sh | sh

tailscaled の自動起動と起動

systemctl enable --now tailscaled

動作確認

systemctl status tailscaled

active (running) になっていることを確認。

  1. IP フォワードを有効化(恒久化)

Exit Node / サブネットルート用に必須。

一時有効

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1

恒久化

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -p

確認

sysctl net.ipv4.ip_forward

-> net.ipv4.ip_forward = 1

  1. NAT(MASQUERADE)設定(家庭LAN外へ出す場合)

家庭ルーターが経路を返してくれない場合、NATが必要(一般的には必要)。

apt update
apt install iptables-persistent -y

一時追加

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

恒久保存

netfilter-persistent save

eth0 は ip addr で確認した外向きインターフェースに置き換えること。

  1. Exit Node & サブネット広告を実行

Tailscale に Exit Node とサブネットを広告。

直接広告(初回や変更時)

tailscale up --advertise-exit-node --advertise-routes=192.168.0.0/24

実行時の注意点:

IP フォワードが有効であること

NATが必要なら設定済みであること

確認

tailscale status

出力に "advertising exit node" があればOK

管理画面(https://tailscale.com/admin/machines)でも「Exit
Node」や広告ルートが見える。

  1. クライアント側での受け入れ(accept-routes)

外出先端末等でサブネットルートを使う場合、クライアント側で受け入れを有効にする必要がある。

クライアント(例:別のノードやPC)

tailscale up --accept-routes

GUI なら "Accept routes" のチェックを入れる

Some peers are advertising routes but --accept-routes is false という警告は、これが無効なままのことを示すだけで問題なし(必要に応じ有効化)。

  1. 自動化:tailscale up をコンテナ起動時に自動実行する

tailscaled は自動起動するが tailscale up(広告コマンド)は自動で再実行されないので systemd で自動化する。

方法A(スクリプト+service) — 推奨

スクリプト作成

cat > /root/tailscale-auto.sh <<'EOF'
#!/bin/bash

少し待ってから実行(tailscaled とネットワークの安定待ち)

sleep 5
/usr/bin/tailscale set --advertise-routes=192.168.0.0/24 --advertise-exit-node
EOF
chmod +x /root/tailscale-auto.sh

systemdユニット作成

cat > /etc/systemd/system/tailscale-auto.service <<'EOF'
[Unit]
Description=Auto run tailscale set to advertise routes and exit node
After=network-online.target tailscaled.service
Wants=network-online.target
Requires=tailscaled.service

[Service]
Type=oneshot
ExecStart=/root/tailscale-auto.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

有効化

systemctl daemon-reload
systemctl enable --now tailscale-auto.service

確認

systemctl status tailscale-auto.service -n 20

tailscale status

メモ:ExecStart を直接 /usr/bin/tailscale set ... にする(スクリプト不要)ことも可能。

  1. よくあるエラーと対処(即対応リスト)
    A. does not exist(テンプレートがない)

対処:pveam download local <テンプレ名> でテンプレをローカルに置く。

B. Configuration file ... does not exist

対処:pct create が失敗している。テンプレ/ストレージ空きを確認して再作成。

C. failed to connect to local tailscaled ... no backend / 503 no backend

原因:/dev/net/tun が無い、または systemd が PID 1 でない。

対処:ホスト側の /etc/pve/lxc/.conf に lxc.mount.entry と lxc.cgroup2.devices.allow を追加して再起動。

D. tailscale-auto.service が Failed to locate executable(status=203/EXEC)

原因:スクリプトが存在しない、パス間違い、実行権限なし。

対処:/root/tailscale-auto.sh の作成と chmod +x、systemctl daemon-reload。

E. Thin pool の警告(LVM)

対処:lvs / vgs で容量確認。不要VM・スナップ削除、必要なら lvextend。

実行後の確認コマンド(まとめ)

コンテナ内で:

tailscale 状態(確認)

tailscale status
tailscale ip -4

tailscaled サービス

systemctl status tailscaled -l

自動化サービス

systemctl status tailscale-auto.service -l

IP フォワード

sysctl net.ipv4.ip_forward

tunデバイス

ls -l /dev/net/tun

ホスト(Proxmox)側で:

pct list
pct status 201
cat /etc/pve/lxc/201.conf

最後に(運用のコツ)

Exit Node を提供するサーバは 帯域と外向きインターフェースの性能に左右される。UDP GRO 警告は高速化のヒントなので必要なら ethtool -K eth0 gro on を検討してね。

サブネット広告(--advertise-routes)は管理画面で承認が必要なことがある(Tailscale 管理画面を確認)。

自動化スクリプトはログ出力(>> /var/log/tailscale-auto.log 2>&1)を入れておくと不具合時の原因追跡が楽。

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?