banner
ZDawn

ZDawn

Do one thing at a time and do well.
tg_channel

自建tailscale derp中轉伺服器

文章轉載#

淺探 Tailscale DERP 中轉服務 | Kiprey's Blog
本篇主要是記錄一下配置 derp 的過程,基本上所有的內容都是來源於上面的文章,有需要的可以直接查閱上面的文章,寫的非常好,過程剖析的很到位,吾輩楷模!

配置要求#

  • 公網 ip
  • 允許 tcp/udp 進站

配置 Drep 伺服器#

安裝 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" #這個名字隨意,但需要記住後面自簽名證書和drepMap需要用  
$ 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 service啟動drep服務
## 1. 如果drep是公用的可以直接啟動drep服務即可,但是這樣如果別人知道你的ip和port,那麼其他人也可以連接,使用你中轉伺服器的流量。
## 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

  1. 添加單個中轉伺服器
    注意: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,  
					},  
				],  
			},  
		},  
	},  
  ...  
}
  1. 添加多個中轉伺服器
...  
{  
	...  
	"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,
					},
				],
			},
		},  
	},  
  ...  
}

檢查中轉伺服器的狀態#

  1. 任意一台節點上利用$ tailscale netcheck 命令即可查看 derp 上線情況,有看到延遲即配置完成。
  2. 因為公用伺服器延遲很大,我不想用公用伺服器,可以配置"OmitDefaultRegions": true, 看上節的多個 derp 配置即可

Enjoy!#

tailscale 的組網能力是真的可以呀,各方面都非常的完全和健壯,免費基本夠個人使用了,非常的 Nice!
唯一的問題是我用電信 5g 的手機打洞回家 600m 的聯通寬帶,測速的上限一直是 50m 的帶寬,不知道是不是 udp 限制了,不過也足夠使用了。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。