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

概要
ステップ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 を自動実行)
よくあるエラーと対処
- テンプレート準備(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 をやる。
- 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不足が原因。
- 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 の併用は警告を出すことがあるが動作には問題ない。
- コンテナ起動・systemd確認
コンテナへ入って systemd が PID 1 かを確認。
pct exec 201 -- bash
コンテナ内で
ps -p 1 -o comm=
-> 出力が "systemd" ならOK
もし systemd でなければ、LXC設定の features や lxc.mount.auto の見直し。テンプレに systemd が入っていることも確認。
- /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 をやり直す。
- Tailscale インストールと tailscaled 起動(コンテナ内)
コンテナ内で以下を実行。
インストール
curl -fsSL https://tailscale.com/install.sh | sh
tailscaled の自動起動と起動
systemctl enable --now tailscaled
動作確認
systemctl status tailscaled
active (running) になっていることを確認。
- 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
- 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 で確認した外向きインターフェースに置き換えること。
- 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」や広告ルートが見える。
- クライアント側での受け入れ(accept-routes)
外出先端末等でサブネットルートを使う場合、クライアント側で受け入れを有効にする必要がある。
クライアント(例:別のノードやPC)
tailscale up --accept-routes
GUI なら "Accept routes" のチェックを入れる
Some peers are advertising routes but --accept-routes is false という警告は、これが無効なままのことを示すだけで問題なし(必要に応じ有効化)。
- 自動化: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 ... にする(スクリプト不要)ことも可能。
- よくあるエラーと対処(即対応リスト)
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)を入れておくと不具合時の原因追跡が楽。