記事転載#
浅探 Tailscale DERP 中継サービス | Kiprey's Blog
この記事では、derp の設定手順を記録しています。基本的に、すべての内容は上記の記事からの引用です。必要な方は上記の記事を直接参照してください。非常に良く書かれており、手順の解説が非常に適切です。素晴らしいです!
設定要件#
- グローバル IP アドレス
- TCP/UDP のインバウンドを許可する
DERP サーバーの設定#
golang のインストール#
# 最新バージョンのgolangが必要です
$ wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz
$ sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz
$ export PATH=$PATH:/usr/local/go/bin
# インストールバージョンの確認
$ go version
# 国内のVPSのダウンロードにプロキシを設定するための設定(国外のVPSの場合は不要)
$ go env -w GOPROXY=https://goproxy.cn,direct
# tailscale-dreperのインストール
$ go install tailscale.com/cmd/derper@latest
Derp サービスの設定と systemd での管理#
# 環境変数の設定
$ DERP_HOST="dawnz-derp" #この名前は任意ですが、後で自己署名証明書とderpMapで使用する必要があります
$ DERP_PORT=8888
$ STUN_PORT=8889
# 自己署名証明書の作成
$ mkdir ~/.certdir && cd ~/.certdir
$ openssl genpkey -algorithm RSA -out ${DERP_HOST}.key
$ openssl req -new -key ${DERP_HOST}.key -out ${DERP_HOST}.csr
$ openssl x509 -req \
-days 36500 \
-in ${DERP_HOST}.csr \
-signkey ${DERP_HOST}.key \
-out ${DERP_HOST}.crt \
-extfile <(printf "subjectAltName=DNS:${DERP_HOST}")
# systemdサービスでdrepサービスを起動
## 1. drepが共有されている場合、drepサービスを直接起動するだけで構いませんが、他の人があなたのIPとポートを知っている場合、他の人もあなたの中継サーバーを使用してトラフィックを中継することができます。
## 2. drepをプライベートサーバーとして構成する場合、中継サーバーもノードとして機能する必要があり、tailscaledのインストールとログイン認証を行い、drepサービスを起動する際には --verify-clients を使用します。
# tailscaledのインストールとログイン認証
$ curl -fsSL https://tailscale.com/install.sh | sh
$ sudo tailscale up
# tailscale-derp.serviceの作成
$ sudo systemctl edit -f tailscale-derp.service
# 以下の内容を貼り付ける
-----------
[Unit]
Description=Tailscale derp service
After=network.target
[Service]
ExecStart=/home/${USER}/go/bin/derper \
-c /home/${USER}/.derper.key \
-a :${DERP_PORT} -http-port -1 \
-stun-port ${STUN_PORT} \
-hostname ${DERP_HOST} \
--certmode manual \
-certdir /home/${USER}/.certdir \
--verify-clients
Restart=always
User=${USER}
[Install]
WantedBy=multi-user.target"
------------
# サービスの起動
$ sudo systemctl start tailscale-derp.service
# ステータスの確認
$ sudo systemctl status tailscale-derp.service
# 起動時に自動起動するように設定
$ sudo systemctl enable tailscale-derp.service
iptables の設定とセキュリティグループの設定#
# iptablesで8888/tcp、8889/udpのインバウンドを許可
$ sudo iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
$ sudo iptables -A INPUT -p udp --dport 8888 -j ACCEPT
# 一部のクラウドサービスプロバイダではセキュリティグループの設定が必要です。ウェブコンソールでセキュリティグループにも同じ設定を行ってください。
ACL の設定#
Tailscaleにログインし、Access Controls
を選択します。
- 個別の中継サーバーを追加する
注意:HostName の設定は、上記の DERP_HOST の設定と同じである必要があります
...
{
...
"acls": [...],
...
"ssh": [...],
...
"derpMap": {
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "Dawnz1",
"Nodes": [
{
"Name": "dawnz-derp1",
"RegionID": 900,
"HostName": "dawnz-derp",
"IPv4": "xx.xx.xx.xx",
"DERPPort": 8888,
"STUNPort": 8889,
"InsecureForTests": true,
},
],
},
},
},
...
}
- 複数の中継サーバーを追加する
...
{
...
"acls": [...],
...
"ssh": [...],
...
"derpMap": {
"OmitDefaultRegions": false,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "Dawnz1",
"Nodes": [
{
"Name": "dawnz-derp1",
"RegionID": 900,
"HostName": "dawnz-derp",
"IPv4": "xx.xx.xx.xx",
"DERPPort": 8888,
"STUNPort": 8889,
"InsecureForTests": true,
},
],
},
"901": {
"RegionID": 901,
"RegionCode": "Dawnz2",
"Nodes": [
{
"Name": "Dawnz-derp2",
"RegionID": 901,
"HostName": "danwz-derp2",
"IPv4": "xx.xx.xx.xx",
"DERPPort": 8888,
"STUNPort": 8889,
"InsecureForTests": true,
},
],
},
},
},
...
}
中継サーバーの状態を確認する#
- 任意のノードで
$ tailscale netcheck
コマンドを使用して derp のオンライン状態を確認できます。遅延が表示されれば、設定が完了しています。 - 共有サーバーの遅延が非常に大きいため、共有サーバーを使用したくない場合は、
"OmitDefaultRegions": true,
を設定し、前述の複数の derp の設定を参照してください。
お楽しみください!#
tailscale のネットワーキング機能は本当に素晴らしいです。すべての面で非常に完全で堅牢です。無料プランでも個人使用に十分です。とても素晴らしいです!
唯一の問題は、私がテレコムの 5G の携帯電話を使用して自宅の 600Mbps のユニコムのブロードバンドに穴を開けると、速度制限が 50Mbps になることです。おそらく UDP が制限されているのかもしれませんが、それでも十分に使用できます。