以下は、Ubuntu でカスタム DERP サーバーを構築する方法です。ドメイン名や SSL 証明書は必要ありませんが、パブリック IP が必要です(ネットワークサーバーは AWS、Alibaba Cloud などのパブリック IP を提供します):
apt update && apt install -y wget git openssl curl sudo vim systemctl cron
- 最新バージョンの go を確認する こちら
wget https://golang.google.cn/dl/go1.21.3.linux-amd64.tar.gz
を最新のバージョンに置き換えるrm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz
システムのデフォルトの go を置き換える- システム変数を変更する
export PATH=$PATH:/usr/local/go/bin
- 中国にいる場合は、go のソースを追加する必要があります:
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct
- DERPER をインストールする
go install tailscale.com/cmd/derper@main
- フォルダに移動する
~/go/pkg/mod/[tailscale]/cmd/derper
、そしてファイルを編集するvim cert.go
関連する検証内容を削除する:if hi.ServerName != m.hostname { return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName) }
- DERPER をコンパイルする:
go build -o /etc/derp/derper
- 自己署名 SSL 証明書を生成する
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.test.com.key -out /etc/derp/derp.test.com.crt -subj "/CN=derp.test.com" -addext "subjectAltName=DNS:derp.test.com"
- システムサービスを作成する
vim /etc/systemd/system/derp.service
:12345 は DERP ノードのポート番号で、TCP プロトコルで公開する必要があります。お好みのポート番号を設定することもできます。ポート 3478 は UDP プロトコルで公開する必要があり、このポート番号は変更できません。stun サービスに必要です。[Unit] Description=TS Derper After=network.target Wants=network.target [Service] User=root Restart=always ExecStart=/etc/derp/derper -hostname derp.test.com -a :12345 -http-port 33446 -certmode manual -certdir /etc/derp --verify-clients RestartSec=5 StartLimitInterval=0 [Install] WantedBy=multi-user.target
-
上記のコマンドを実行すると、DERPER がアクティブな状態で表示されるはずです。その後、ブラウザで
systemctl enable derp systemctl start derp systemctl status derp
https://IP:PORT
を開くと、次のように表示されます:DERP This is a Tailscale DERP server
- Tailscale Admin Console を開き、
Access Controls
をクリックし、以下の内容をssh
にコピーします:"derpMap": { "OmitDefaultRegions": true, // trueの場合、TailscaleのデフォルトDERPノードを使用しない "Regions": { "900": { // 900以上の任意の数字 "RegionID": 900, // 同上 "RegionCode": "myDerp", "Nodes": [ { "Name": "1", "RegionID": 900, // 同上 "HostName": "xxx.xxx.xxx.xxx", // あなたのIP "DERPPort": 12345, // あなたのポート番号 "InsecureForTests": true, // 証明書の検証をスキップするためにtrueにする必要があります }, ], }, }, },
- DERP ノードが動作しているかどうかを確認するために、他のデバイスで
tailscale netcheck
を実行します。家のノードの速度はデフォルトよりも遅いです。Report: * UDP: false * IPv4: (no addr found) * IPv6: no, but OS has support * MappingVariesByDestIP: * HairPinning: * PortMapping: * CaptivePortal: false * Nearest DERP: Amsterdam * DERP latency: - ams: 12ms (Amsterdam) - lhr: 13ms (London) - hans: 13.1ms ()
- DERPER サービスは常に停止する可能性があるため、定期的に再起動する必要があります。
crontab
が最適な選択肢です。 -
systemctl start cron systemctl enable cron systemctl status cron
crontab -e
を実行し、0 */12 * * * systemctl start derp
を貼り付けます。DERPER サービスは 12 時間ごとに再起動されます。その後、ESC
を押し、:wq
を入力して終了します。