精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

新型內(nèi)網(wǎng)穿透的基本原理

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 作者:馬哥Linux運(yùn)維 ? 2022-10-26 10:14 ? 次閱讀

一、內(nèi)網(wǎng)穿透簡述

由于國內(nèi)網(wǎng)絡(luò)環(huán)境問題, 普遍家庭用戶寬帶都沒有分配到公網(wǎng) IP(我有固定公網(wǎng) IP, 嘿嘿); 這時(shí)候一般我們需要從外部訪問家庭網(wǎng)絡(luò)時(shí)就需要通過一些魔法手段, 比如 VPN、遠(yuǎn)程軟件(向日葵…)等; 但是這些工具都有一個普遍存在的問題: 慢+卡!

1.1、傳統(tǒng)星型拓?fù)?/p>

究其根本因素在于, 在傳統(tǒng)架構(gòu)中如果兩個位于多層 NAT(簡單理解為多個路由器)之后的設(shè)備, 只能通過一些中央(VPN/遠(yuǎn)程軟件)中轉(zhuǎn)服務(wù)器進(jìn)行鏈接, 這時(shí)網(wǎng)絡(luò)連接速度取決于中央服務(wù)器帶寬和速度; 這種網(wǎng)絡(luò)架構(gòu)我這里簡稱為: 星型拓?fù)?/p>

94273ae0-5477-11ed-a3b6-dac502259ad0.png

從這張圖上可以看出, 你的 “工作筆記本” 和 “家庭 NAS” 之間通訊的最大傳輸速度為 Up/Down: 512K/s; 因?yàn)榱髁拷?jīng)過了中央服務(wù)器中轉(zhuǎn), 由于網(wǎng)絡(luò)木桶效應(yīng)存在, 即使你兩側(cè)的網(wǎng)絡(luò)速度再高也沒用, 整體的速度取決于這個鏈路中最低的一個設(shè)備網(wǎng)速而不是你兩端的設(shè)備.

在這種拓?fù)湎? 想提高速度只有一個辦法: 加錢! 在不使用 “鈔能力” 的情況下, 普遍免費(fèi)的軟件提供商不可能給予過多的資源來讓用戶白嫖, 而自己弄大帶寬的中央服務(wù)器成本又過高.

1.2、NAT 穿透與網(wǎng)狀拓?fù)?/p>

本部分只做簡述, 具體里面有大量細(xì)節(jié)和規(guī)則可能描述不準(zhǔn)確, 細(xì)節(jié)部分推薦閱讀 How NAT traversal works.

既然傳統(tǒng)的星型拓?fù)溆羞@么多問題, 那么有沒有其他騷操作可以解決呢? 答案是有的, 簡單來說就是利用 NAT 穿透原理. NAT 穿透簡單理解如下: 在 A 設(shè)備主動向 B 設(shè)備發(fā)送流量后, 整個鏈路上的防火墻會短時(shí)間打開一個映射規(guī)則, 該規(guī)則允許 B 設(shè)備短暫的從這個路徑上反向向 A 設(shè)備發(fā)送流量. 更通俗的講大概就是所謂的: “順著網(wǎng)線來打你”

943f826c-5477-11ed-a3b6-dac502259ad0.png

搞清了這個規(guī)則以后, 我們就可以弄一臺 “低配” 的中央服務(wù)器, 讓中央服務(wù)器來幫助我們協(xié)商兩邊的設(shè)備誰先訪問誰(或者說是訪問規(guī)則); 兩個設(shè)備一起無腦訪問對方, 然后觸發(fā)防火墻的 NAT 穿透規(guī)則(防火墻打開), 此后兩個設(shè)備就可以不通過中央服務(wù)器源源不斷的通訊了. 在這種架構(gòu)下我們的設(shè)備其實(shí)就組成了一個非標(biāo)準(zhǔn)的網(wǎng)狀拓?fù)?

94d3d926-5477-11ed-a3b6-dac502259ad0.png

在這種拓?fù)湎? 兩個設(shè)備之間的通訊速度已經(jīng)不在取決于中央服務(wù)器, 而是直接取決于兩端設(shè)備的帶寬, 也就是說達(dá)到了設(shè)備網(wǎng)絡(luò)帶寬峰值. 當(dāng)然 NAT 穿透也不是百分百能夠成功的, 在復(fù)雜網(wǎng)絡(luò)情況下有些防火墻不會按照預(yù)期工作或者說有更嚴(yán)格的限制; 比如 IP、端口、協(xié)議限制等等, 所以為了保證可靠性可以讓中央服務(wù)器中轉(zhuǎn)做后備方案, 即盡量嘗試 NAT 穿透, 如果不行走中央服務(wù)器中繼.

二、Tailscale 簡介

第一部分是為了方便讀者理解一些新型內(nèi)網(wǎng)穿透的大致基本原理, 現(xiàn)在回到本文重點(diǎn): Tailscale

Tailscale 就是一種利用 NAT 穿透(aka: P2P 穿透)技術(shù)的 VPN 工具. Tailscale 客戶端等是開源的, 不過遺憾的是中央控制服務(wù)器目前并不開源; Tailscale 目前也提供免費(fèi)的額度給用戶使用, 在 NAT 穿透成功的情況下也能保證滿速運(yùn)行.

不過一旦無法 NAT 穿透需要做中轉(zhuǎn)時(shí), Tailscale 官方的服務(wù)器由于眾所周知的原因在國內(nèi)訪問速度很拉胯; 不過萬幸的是開源社區(qū)大佬們搓了一個開源版本的中央控制服務(wù)器(Headscale), 也就是說: 我們可以自己搭建中央服務(wù)器啦, 完全 “自主可控” 啦.

三、搭建 Headscale 服務(wù)端

以下命令假設(shè)安裝系統(tǒng)為 Ubuntu 22.04, 其他系統(tǒng)請自行調(diào)整.

3.1、宿主機(jī)安裝

Headscale 是采用 Go 語言編寫的, 所以只有一個二進(jìn)制文件, 在 Github Releases 頁面下載最新版本即可:

#下載
wgethttps://github.com/juanfont/headscale/releases/download/v0.16.4/headscale_0.16.4_linux_amd64-O/usr/local/bin/headscale

#增加可執(zhí)行權(quán)限
chmod+x/usr/local/bin/headscale

下載完成后為了安全性我們需要創(chuàng)建單獨(dú)的用戶和目錄用于 Headscale 運(yùn)行

#配置目錄
mkdir-p/etc/headscale

#創(chuàng)建用戶
useradd
--create-home
--home-dir/var/lib/headscale/
--system
--user-group
--shell/usr/sbin/nologin
headscale

為了保證 Headscale 能持久運(yùn)行, 我們需要創(chuàng)建 SystemD 配置文件

#/lib/systemd/system/headscale.service
[Unit]
Description=headscalecontroller
After=syslog.target
After=network.target

[Service]
Type=simple
User=headscale
Group=headscale
ExecStart=/usr/local/bin/headscaleserve
Restart=always
RestartSec=5

#Optionalsecurityenhancements
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/headscale/var/run/headscale
AmbientCapabilities=CAP_NET_BIND_SERVICE
RuntimeDirectory=headscale

[Install]
WantedBy=multi-user.target

3.2、配置 Headscale

安裝完成以后我們需要在 /etc/headscale/config.yaml 中配置 Headscale 的啟動配置, 以下為配置樣例以及解釋(僅列出重要配置):

---
#Headscale服務(wù)器的訪問地址
#
#這個地址是告訴客戶端需要訪問的地址,即使你需要在跑在
#負(fù)載均衡器之后這個地址也必須寫成負(fù)載均衡器的訪問地址
server_url:https://your.domain.com

#Headscale實(shí)際監(jiān)聽的地址
listen_addr:0.0.0.0:8080

#監(jiān)控地址
metrics_listen_addr:127.0.0.1:9090

#grpc監(jiān)聽地址
grpc_listen_addr:0.0.0.0:50443

#是否允許不安全的grpc連接(非TLS)
grpc_allow_insecure:false

#客戶端分配的內(nèi)網(wǎng)網(wǎng)段
ip_prefixes:
-fd7aa1e0::/48
-100.64.0.0/10

#中繼服務(wù)器相關(guān)配置
derp:
server:
#關(guān)閉內(nèi)嵌的derper中繼服務(wù)(可能不安全,還沒去看代碼)
enabled:false

#下發(fā)給客戶端的中繼服務(wù)器列表(默認(rèn)走官方的中繼節(jié)點(diǎn))
urls:
-https://controlplane.tailscale.com/derpmap/default

#可以在本地通過yaml配置定義自己的中繼接待你
paths:[]

#SQLiteconfig
db_type:sqlite3
db_path:/var/lib/headscale/db.sqlite

#使用自動簽發(fā)證書是的域名
tls_letsencrypt_hostname:""

#使用自定義證書時(shí)的證書路徑
tls_cert_path:""
tls_key_path:""

#是否讓客戶端使用隨機(jī)端口,默認(rèn)使用41641/UDP
randomize_client_port:false

3.3、證書及反向代理

可能很多人和我一樣, 希望使用 ACME 自動證書, 又不想占用 80/443 端口, 又想通過負(fù)載均衡器負(fù)載, 配置又看的一頭霧水; 所以這里詳細(xì)說明一下 Headscale 證書相關(guān)配置和工作邏輯:

1、Headscale 的 ACME 只支持 HTTP/TLS 挑戰(zhàn), 所以使用后必定占用 80/443

2、當(dāng)配置了 tls_letsencrypt_hostname 時(shí)一定會進(jìn)行 ACME 申請

3、在不配置 tls_letsencrypt_hostname 時(shí)如果配置了 tls_cert_path 則使用自定義證書

4、兩者都不配置則不使用任何證書, 服務(wù)端監(jiān)聽 HTTP 請求

5、三種情況下(ACME 證書、自定義證書、無證書)主服務(wù)都只監(jiān)聽 listen_addr 地址, 與 server_url 沒半毛錢關(guān)系

6、只有在有證書(ACME 證書或自定義證書)的情況下或者手動開啟了 grpc_allow_insecure 才會監(jiān)聽 grpc 遠(yuǎn)程調(diào)用服務(wù)

綜上所述, 如果你想通過 Nginx、Caddy 反向代理 Headscale, 則你需要滿足以下配置:

1、刪除掉 tls_letsencrypt_hostname 或留空, 防止 ACME 啟動

2、刪除掉 tls_cert_path 或留空, 防止加載自定義證書

3、server_url 填寫 Nginx 或 Caddy 被訪問的 HTTPS 地址

4、在你的 Nginx 或 Caddy 中反向代理填寫 listen_addr 的 HTTP 地址

Nginx 配置參考 官方 Wiki, Caddy 只需要一行 reverse_proxy headscale:8080 即可(地址自行替換).

至于 ACME 證書你可以通過使用 acme.sh 自動配置 Nginx 或者使用 Caddy 自動申請等方式, 這些已經(jīng)與 Headscale 無關(guān)了, 不在本文探討范圍內(nèi).

3.4、內(nèi)網(wǎng)地址分配

請盡量不要將 ip_prefixes 配置為默認(rèn)的 100.64.0.0/10 網(wǎng)段, 如果你有興趣查詢了該地址段, 那么你應(yīng)該明白它叫 CGNAT; 很不幸的是例如 Aliyun 底層的 apt 源等都在這個范圍內(nèi), 可能會有一些奇怪問題.

3.5、啟動 Headscale

在處理完證書等配置后, 只需要愉快的啟動一下即可:

#開機(jī)自啟動并立即啟動
systemctlenableheadscale--now

再啰嗦一嘴, 如果你期望使用 Headscale ACME 自動申請證書, 你的關(guān)鍵配置應(yīng)該像這樣:

server_url:https://your.domain.com
listen_addr:0.0.0.0:443
tls_letsencrypt_hostname:"your.domain.com"
tls_cert_path:""
tls_key_path:""

如果你期望使用自定義證書, 則你的關(guān)鍵配置應(yīng)該像這樣:

server_url:https://your.domain.com
listen_addr:0.0.0.0:443
tls_letsencrypt_hostname:""
tls_cert_path:"/path/to/cert"
tls_key_path:"/path/to/key"

如果你期望使用負(fù)載均衡器, 那么你的關(guān)鍵配置應(yīng)該像這樣:

server_url:https://your.domain.com
listen_addr:0.0.0.0:8080
tls_letsencrypt_hostname:""
tls_cert_path:""
tls_key_path:""

在使用負(fù)載均衡器配置時(shí), 啟動后會有一行警告日志, 忽略即可:

2022-09-18T0736ZWRNListeningwithoutTLSbutServerURLdoesnotstartwithhttp://

3.6、Docker Compose 安裝

Compose 配置樣例文件如下:

#docker-compose.yaml
version:"3.9"

services:
headscale:
container_name:headscale
image:headscale/headscale:0.16.4
ports:
-"8080:8080"
cap_add:
-NET_ADMIN
-NET_RAW
-SYS_MODULE
sysctls:
-net.ipv4.ip_forward=1
-net.ipv6.conf.all.forwarding=1
restart:always
volumes:
-./conf:/etc/headscale
-data:/var/lib/headscale
command:["headscale","serve"]
volumes:
config:
data:

你需要在與 docker-compose.yaml 同級目錄下創(chuàng)建 conf 目錄用于存儲配置文件; 具體配置請參考上面的配置詳解等部分, 最后不要忘記你的 Compose 文件端口映射需要和配置文件保持一致.

四、客戶端安裝

對于客戶端來說, Tailscale 提供了多個平臺和發(fā)行版的預(yù)編譯安裝包, 并且部分客戶端直接支持設(shè)置自定義的中央控制服務(wù)器.

4.1、Linux 客戶端

Linux 用戶目前只需要使用以下命令安裝即可:

curl-fsSLhttps://tailscale.com/install.sh|sh

默認(rèn)該腳本會檢測相關(guān)的 Linux 系統(tǒng)發(fā)行版并使用對應(yīng)的包管理器安裝 Tailscale, 安裝完成后使用以下命令啟動:

tailscaleup--login-serverhttps://your.domain.com--advertise-routes=192.168.11.0/24--accept-routes=true--accept-dns=false

關(guān)于選項(xiàng)設(shè)置:

--login-server: 指定使用的中央服務(wù)器地址(必填)

--advertise-routes: 向中央服務(wù)器報(bào)告當(dāng)前客戶端處于哪個內(nèi)網(wǎng)網(wǎng)段下, 便于中央服務(wù)器讓同內(nèi)網(wǎng)設(shè)備直接內(nèi)網(wǎng)直連(可選的)或者將其他設(shè)備指定流量路由到當(dāng)前內(nèi)網(wǎng)(可選)

--accept-routes: 是否接受中央服務(wù)器下發(fā)的用于路由到其他客戶端內(nèi)網(wǎng)的路由規(guī)則(可選)

--accept-dns: 是否使用中央服務(wù)器下發(fā)的 DNS 相關(guān)配置(可選, 推薦關(guān)閉)

啟動完成后, tailscale 將會卡住, 并打印一個你的服務(wù)器訪問地址; 瀏覽器訪問該地址后將會得到一條命令:

95093814-5477-11ed-a3b6-dac502259ad0.png958a1506-5477-11ed-a3b6-dac502259ad0.png

注意: 瀏覽器上顯示的命令需要在中央控制服務(wù)器執(zhí)行(Headscale), NAMESAPCE 位置應(yīng)該替換為一個具體的 Namespace, 可以使用以下命令創(chuàng)建 Namespace (名字隨意)并讓設(shè)備加入:

95db3d32-5477-11ed-a3b6-dac502259ad0.png

在 Headscale 服務(wù)器上執(zhí)行命令成功后客戶端命令行在稍等片刻便會執(zhí)行完成, 此時(shí)該客戶端已經(jīng)被加入 Headscale 網(wǎng)絡(luò)并分配了特定的內(nèi)網(wǎng) IP; 多個客戶端加入后在 NAT 穿透成功時(shí)就可以互相 ping 通, 如果出現(xiàn)問題請閱讀后面的調(diào)試細(xì)節(jié), 只要能注冊成功就算是成功了一半, 暫時(shí)不要慌.

4.2、MacOS 客戶端

MacOS 客戶端安裝目前有兩種方式, 一種是使用標(biāo)準(zhǔn)的 AppStore 版本(好像還有一個可以直接下載的), 需要先設(shè)置服務(wù)器地址然后再啟動 App:

首先訪問你的 Headscale 地址 https://your.domain.com/apple:

95ec41ae-5477-11ed-a3b6-dac502259ad0.png

復(fù)制倒數(shù)第二行命令到命令行執(zhí)行(可能需要 sudo 執(zhí)行), 然后去 AppStore 搜索 Hailscale 安裝并啟動; 啟動后會自動打開瀏覽器頁面, 與 Linux 安裝類似, 復(fù)制命令到 Headscale 服務(wù)器執(zhí)行即可(Namespace 創(chuàng)建一次就行).

第二種方式也是比較推薦的方式, 直接編譯客戶端源碼安裝, 體驗(yàn)與 Linux 版本一致:

#安裝go
brewinstallgo

#編譯命令行客戶端
goinstalltailscale.com/cmd/tailscale{,d}@main

#安裝為系統(tǒng)服務(wù)
sudotailscaledinstall-system-daemon

安裝完成后同樣通過 tailscale up 命令啟動并注冊即可, 具體請參考 Linux 客戶端安裝部分.

4.3、其他客戶端

關(guān)于 Windows 客戶端大致流程就是創(chuàng)建一個注冊表, 然后同樣安裝官方 App 啟動, 接著瀏覽器復(fù)制命令注冊即可. 至于移動端本人沒有需求, 所以暫未研究. Windows 具體的安裝流程請?jiān)L問 https://your.domain.com/windows 地址查看(基本與 MacOS AppStore 版本安裝類似).

五、中繼服務(wù)器搭建

在上面的 Headscale 搭建完成并添加客戶端后, 某些客戶端可能無法聯(lián)通; 這是由于網(wǎng)絡(luò)復(fù)雜情況下導(dǎo)致了 NAT 穿透失敗; 為此我們可以搭建一個中繼服務(wù)器來進(jìn)行傳統(tǒng)的星型拓?fù)?a target="_blank">通信.

5.1、搭建 DERP Server

首先需要注意的是, 在需要搭建 DERP Server 的服務(wù)器上, 請先安裝一個 Tailscale 客戶端并注冊到 Headscale; 這樣做的目的是讓搭建的 DERP Server 開啟客戶端認(rèn)證, 否則你的 DERP Server 可以被任何人白嫖.

目前 Tailscale 官方并未提供 DERP Server 的安裝包, 所以需要我們自行編譯安裝; 在編譯之前請確保安裝了最新版本的 Go 語言及其編譯環(huán)境.

#編譯DERPServer
goinstalltailscale.com/cmd/derper@main

#復(fù)制到系統(tǒng)可執(zhí)行目錄
mv${GOPATH}/bin/derper/usr/local/bin

#創(chuàng)建用戶和運(yùn)行目錄
useradd
--create-home
--home-dir/var/lib/derper/
--system
--user-group
--shell/usr/sbin/nologin
derper

接下來創(chuàng)建一個 SystemD 配置:

#/lib/systemd/system/derper.service
[Unit]
Description=tailscalederperserver
After=syslog.target
After=network.target

[Service]
Type=simple
User=derper
Group=derper
ExecStart=/usr/local/bin/derper-c=/var/lib/derper/private.key-a=:8989-stun-port=3456-verify-clients
Restart=always
RestartSec=5

#Optionalsecurityenhancements
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/derper/var/run/derper
AmbientCapabilities=CAP_NET_BIND_SERVICE
RuntimeDirectory=derper

[Install]
WantedBy=multi-user.target

最后使用以下命令啟動 Derper Server 即可:

systemctlenablederper--now

注意: 默認(rèn)情況下 Derper Server 會監(jiān)聽在 :443 上, 同時(shí)會觸發(fā)自動 ACME 申請證書. 關(guān)于證書邏輯如下:

1、如果不指定 -a 參數(shù), 則默認(rèn)監(jiān)聽 :443

2、如果監(jiān)聽 :443 并且未指定 --certmode=manual 則會強(qiáng)制使用 --hostname 指定的域名進(jìn)行 ACME 申請證書

3、如果指定了 --certmode=manual 則會使用 --certmode 指定目錄下的證書開啟 HTTPS

4、如果指定了 -a 為非 :443 端口, 且沒有指定 --certmode=manual 則只監(jiān)聽 HTTP

如果期望使用 ACME 自動申請只需要不增加 -a 選項(xiàng)即可(占用 443 端口), 如果期望通過負(fù)載均衡器負(fù)載, 則需要將 -a 選項(xiàng)指定到非 443 端口, 然后配置 Nginx、Caddy 等 LB 軟件即可. 最后一點(diǎn) stun 監(jiān)聽的是 UDP 端口, 請確保防火墻打開此端口.

5.2、配置 Headscale

在創(chuàng)建完 Derper 中繼服務(wù)器后, 我們還需要配置 Headscale 來告訴所有客戶端在必要時(shí)可以使用此中繼節(jié)點(diǎn)進(jìn)行通信; 為了達(dá)到這個目的, 我們需要在 Headscale 服務(wù)器上創(chuàng)建以下配置:

#/etc/headscale/derper.yaml

regions:
901:
regionid:901
regioncode:private-derper
regionname:"MyPrivateDerperServer"
nodes:
-name:private-derper
regionid:901
#自行更改為自己的域名
hostname:derper.xxxxx.com
#Derper節(jié)點(diǎn)的IP
ipv4:123.123.123.123
#Derper設(shè)置的STUN端口
stunport:3456

在創(chuàng)建好基本的 Derper Server 節(jié)點(diǎn)信息配置后, 我們需要調(diào)整主配置來讓 Headscale 加載:

derp:
server:
#這里關(guān)閉Headscale默認(rèn)的DerperServer
enabled:false
#urls留空,保證不加載官方的默認(rèn)Derper
urls:[]
#這里填寫Derper節(jié)點(diǎn)信息配置的絕對路徑
paths:
-/etc/headscale/derper.yaml

#Ifenabled,aworkerwillbesetuptoperiodically
#refreshthegivensourcesandupdatethederpmap
#willbesetup.
auto_update_enabled:true

#HowoftenshouldwecheckforDERPupdates?
update_frequency:24h

接下來重啟 Headscale 并重啟 client 上的 tailscale 即可看到中繼節(jié)點(diǎn):

~???tailscalenetcheck

Report:
*UDP:true
*IPv4:yes,124.111.111.111:58630
*IPv6:no,butOShassupport
*MappingVariesByDestIP:false
*HairPinning:false
*PortMapping:UPnP,NAT-PMP,PCP
*CaptivePortal:true
*NearestDERP:XXXXDerperServer
*DERPlatency:
-XXXX:10.1ms(XXXXDerperServer)

到此中繼節(jié)點(diǎn)搭建完成.

5.3、Docker Compose 安裝

目前官方似乎也沒有提供 Docker 鏡像, 我自己通過 GitHub Action 編譯了一個 Docker 鏡像, 以下是使用此鏡像的 Compose 文件樣例:

version:'3.9'
services:
derper:
image:mritd/derper
container_name:derper
restart:always
ports:
-"8080:8080/tcp"
-"3456:3456/udp"
environment:
TZ:Asia/Shanghai
volumes:
-/etc/timezone:/etc/timezone
-/var/run/tailscale:/var/run/tailscale
-data:/var/lib/derper
volumes:
data:

該鏡像默認(rèn)開啟了客戶端驗(yàn)證, 所以請確保 /var/run/tailscale 內(nèi)存在已加入 Headscale 成功的 tailscaled 實(shí)例的 sock 文件. 其他具體環(huán)境變量等參數(shù)配置請參考 Earthfile.

六、客戶端網(wǎng)絡(luò)調(diào)試

在調(diào)試中繼節(jié)點(diǎn)或者不確定網(wǎng)絡(luò)情況時(shí), 可以使用一些 Tailscale 內(nèi)置的命令來調(diào)試網(wǎng)絡(luò).

6.1、Ping 命令

tailscale ping 命令可以用于測試 IP 連通性, 同時(shí)可以看到時(shí)如何連接目標(biāo)節(jié)點(diǎn)的. 默認(rèn)情況下 Ping 命令首先會使用 Derper 中繼節(jié)點(diǎn)通信, 然后嘗試 P2P 連接; 一旦 P2P 連接成功則自動停止 Ping:

~???tailscaleping10.24.0.5
pongfromk8s13(10.24.0.5)viaDERP(XXXXX)in14ms
pongfromk8s13(10.24.0.5)viaDERP(XXXXX)in13ms
pongfromk8s13(10.24.0.5)viaDERP(XXXXX)in14ms
pongfromk8s13(10.24.0.5)viaDERP(XXXXX)in12ms
pongfromk8s13(10.24.0.5)viaDERP(XXXXX)in12ms
pongfromk8s13(10.24.0.5)via3.4.170.23:2495in9ms

由于其先走 Derper 的特性也可以用來測試 Derper 連通性.

6.2、Status 命令

通過 tailscale status 命令可以查看當(dāng)前節(jié)點(diǎn)與其他對等節(jié)點(diǎn)的連接方式, 通過此命令可以查看到當(dāng)前節(jié)點(diǎn)可連接的節(jié)點(diǎn)以及是否走了 Derper 中繼:

~???tailscalestatus
10.24.0.8xmackovacsmacOS-
alivpnkovacslinuxactive;direct4.3.4.5:41644,tx1264rx944
aliyunkovacslinux-
bobkovacsmacOSoffline
bob-imackovacsmacOSoffline
companykovacslinuxactive;direct114.114.114.114:41642,tx1296rx880

6.3、NetCheck 命令

有些情況下我們可以確認(rèn)是當(dāng)前主機(jī)的網(wǎng)絡(luò)問題導(dǎo)致沒法走 P2P 連接, 但是我們又想了解一下當(dāng)前的網(wǎng)絡(luò)環(huán)境; 此時(shí)可以使用 tailscale netcheck 命令來檢測當(dāng)前的網(wǎng)絡(luò)環(huán)境, 此命令將會打印出詳細(xì)的網(wǎng)絡(luò)環(huán)境報(bào)告:

~???tailscalenetcheck
2022/10/192127portmap:[v1]GotPMPresponse;IP:123.123.123.123,epoch:297671
2022/10/192127portmap:[v1]GotPCPresponse:epoch:297671
2022/10/192127portmap:[v1]UPnPreply{Location//192.168.11.1:39735/rootDesc.xmlServer:AsusWRT/386UPnP/1.1MiniUPnPd/2.2.0USN23345-2380-45f5-34534-04421abwb7cf0:schemas-upnp-orgInternetGatewayDevice:1},"HTTP/1.1200OK
CACHE-CONTROL:max-age=120
ST:urndevice1
USN:uuid:34564645-2380-45f5-b069-sdfdght3245....."
2022/10/192127portmap:UPnPmetachanged:{Location//192.168.11.1:39735/rootDesc.xmlServer:AsusWRT/386UPnP/1.1MiniUPnPd/2.2.0USN23345-2380-45f5-b069-04421abwb7cf0:schemas-upnp-orgInternetGatewayDevice:1}

Report:
*UDP:true
*IPv4:yes,123.123.123.123:5935
*IPv6:no,butOShassupport
*MappingVariesByDestIP:false
*HairPinning:true
*PortMapping:UPnP,NAT-PMP,PCP
*CaptivePortal:true
*NearestDERP:XXXXXAliyun
*DERPlatency:
-XXXXX:9.5ms(XXXXXAliyun)
-XXXXX:53.1ms(XXXXXBandwagonHost)

七、其他補(bǔ)充

7.1、某些代理工具兼容性

MacOS 下使用一些增強(qiáng)代理工具時(shí), 如果安裝 App Store 的官方圖形化客戶端, 則可能與這些軟件沖突, 推薦使用純命令行版本并添加進(jìn)程規(guī)則匹配 tailscale 和 tailscaled 兩個進(jìn)程, 讓它們始終走 DIRECT 規(guī)則即可.

7.2、MacOS 下 CPU 占用突然起飛

在使用一些網(wǎng)絡(luò)代理工具時(shí), 網(wǎng)絡(luò)工具會設(shè)置默認(rèn)路由; 這可能導(dǎo)致 tailscaled 無法獲取到默認(rèn)路由接口, 然后進(jìn)入死循環(huán)并把 CPU 吃滿, 同時(shí)會與 Derper 服務(wù)器產(chǎn)生大量上傳流量. 截止本文發(fā)布此問題已修復(fù), 請使用 mian 分支編譯安裝, 具體見 ISSUE/5879.

7.3、阿里云安裝客戶端后無法更新軟件

Tailscale 默認(rèn)使用 CGNAT(100.64.0.0/10) 網(wǎng)段作為內(nèi)部地址分配網(wǎng)段, 目前 Tailscale 僅允許自己的接口使用此網(wǎng)段, 不巧的是阿里云的 DNS、Apt 源等也采用此網(wǎng)段. 這會導(dǎo)致阿里云服務(wù)器安裝客戶端后 DNS、Apt 等不可用, 解決方案目前只能修改源碼刪除掉這兩個 DROP 規(guī)則并重新編譯.

7.4、開啟路由轉(zhuǎn)發(fā)

大多數(shù)時(shí)候我們可能并不會在每個服務(wù)器上都安裝 Tailscale 客戶端, 通常只安裝 2、3 臺, 然后想通過這兩三臺轉(zhuǎn)發(fā)該內(nèi)網(wǎng)的所有流量. 此時(shí)你需要

啟動 tailscale 時(shí)設(shè)置正確的路由提示 --advertise-routes=192.168.1.0/24 來告訴 Headscale 服務(wù)器 “我這個節(jié)點(diǎn)可以轉(zhuǎn)發(fā)這些地址的路由”

其他節(jié)點(diǎn)啟動時(shí)需要增加 --accept-routes=true 選項(xiàng)來聲明 “我接受外部其他節(jié)點(diǎn)發(fā)布的路由”

以上兩個選項(xiàng)配置后, 只需要 Headscale 服務(wù)器上使用 headscale node route enable -a -i XX(ID) 開啟即可. 開啟后目標(biāo)節(jié)點(diǎn)(ID)的路由就會發(fā)布到接受外部路由的所有節(jié)點(diǎn), 想要關(guān)閉的話去掉 -a 即可.

7.5、其他問題

以上也只是我個人遇到的一些問題, 如果有其他問題推薦先搜索然后查看 ISSUE, 最后不行可以看看源碼. 目前來說 Tailscale 很多選項(xiàng)很模糊, 可能需要閱讀源碼以后才能知道到底應(yīng)該怎么做.

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 帶寬
    +關(guān)注

    關(guān)注

    3

    文章

    907

    瀏覽量

    40845
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9017

    瀏覽量

    85182
  • 通訊
    +關(guān)注

    關(guān)注

    9

    文章

    893

    瀏覽量

    34833

原文標(biāo)題:Headscale 搭建 P2P 內(nèi)網(wǎng)穿透

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    請問花生殼怎么進(jìn)行內(nèi)網(wǎng)穿透的?

    花生殼是怎么進(jìn)行內(nèi)網(wǎng)穿透的,能不能用來***,還是只有組建內(nèi)網(wǎng)的功能。
    發(fā)表于 04-18 06:02

    內(nèi)網(wǎng)穿透詳解-基于NATAPP&NatAssist測試

    本帖最后由 1406093611 于 2019-11-13 22:41 編輯 內(nèi)網(wǎng)穿透詳解-基于NATAPP&NatAssist TCP測試【前言】最近做一個4G模塊
    發(fā)表于 09-13 12:14

    搭建自己的IOT平臺---內(nèi)網(wǎng)穿透

    相信大部分小伙伴在搭建環(huán)境的時(shí)候都是用虛擬機(jī)來搭建的,如果想實(shí)現(xiàn)外網(wǎng)訪問內(nèi)網(wǎng)的話,還是比較麻煩的。在這里我就針對這個問題,寫一篇教程,教大家用最簡單的方式實(shí)現(xiàn)內(nèi)網(wǎng)穿透,能做到外網(wǎng)訪問內(nèi)網(wǎng)
    發(fā)表于 12-09 23:14

    穿透內(nèi)網(wǎng)遠(yuǎn)程控制軟件 TeamViewer_7.0.12979.0

    電子發(fā)燒友網(wǎng)站提供《穿透內(nèi)網(wǎng)遠(yuǎn)程控制軟件 TeamViewer_7.0.12979.0.exe》資料免費(fèi)下載
    發(fā)表于 03-15 22:30 ?22次下載

    如何使用花生殼搭建內(nèi)網(wǎng)穿透

    花生殼的內(nèi)網(wǎng)穿透原理就是通過花生殼服務(wù)器把他們的公網(wǎng)IP地址進(jìn)行翻譯,轉(zhuǎn)換成為一種私有的地址,然后在花生殼服務(wù)器上,類似做端口映射,通過不同的端口來訪問不同的內(nèi)網(wǎng)電腦,這一切都是通過互聯(lián)網(wǎng)來實(shí)現(xiàn)的。這里我們介紹一下如何通過花生殼
    的頭像 發(fā)表于 12-09 11:29 ?1525次閱讀

    常用的內(nèi)網(wǎng)穿透工具原理和使用方法

    nps是一款輕量級、高性能、功能強(qiáng)大的內(nèi)網(wǎng)穿透代理服務(wù)器。目前支持tcp、udp流量轉(zhuǎn)發(fā),可支持任何tcp、udp上層協(xié)議(訪問內(nèi)網(wǎng)網(wǎng)站、本地支付接口調(diào)試、ssh訪問、遠(yuǎn)程桌面,內(nèi)網(wǎng)d
    發(fā)表于 07-10 11:20 ?1000次閱讀
    常用的<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b>工具原理和使用方法

    內(nèi)網(wǎng)穿透工具的種類、原理和使用方法

    本文以滲透的視角,總結(jié)幾種個人常用的內(nèi)網(wǎng)穿透內(nèi)網(wǎng)代理工具,介紹其簡單原理和使用方法。
    的頭像 發(fā)表于 08-25 10:35 ?1776次閱讀
    <b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b>工具的種類、原理和使用方法

    什么是nps?常見內(nèi)網(wǎng)穿透工具有哪些?

    nps是一款輕量級、高性能、功能強(qiáng)大的內(nèi)網(wǎng)穿透代理服務(wù)器。 目前支持tcp、udp流量轉(zhuǎn)發(fā),可支持任何tcp、udp上層協(xié)議(訪問內(nèi)網(wǎng)網(wǎng)站、本地支付接口調(diào)試、ssh訪問、遠(yuǎn)程桌面,內(nèi)網(wǎng)
    發(fā)表于 08-31 10:32 ?1757次閱讀
    什么是nps?常見<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b>工具有哪些?

    內(nèi)網(wǎng)穿透可以帶給物聯(lián)網(wǎng)什么呢?

    內(nèi)網(wǎng)穿透可以帶給物聯(lián)網(wǎng)什么呢?
    的頭像 發(fā)表于 10-14 15:14 ?796次閱讀

    神器!實(shí)現(xiàn)內(nèi)網(wǎng)穿透的幾款工具

    frp 是一個專注于內(nèi)網(wǎng)穿透的高性能的反向代理應(yīng)用,支持 TCP、UDP、HTTP、HTTPS 等多種協(xié)議。可以將內(nèi)網(wǎng)服務(wù)以安全、便捷的方式通過具有公網(wǎng) IP 節(jié)點(diǎn)的中轉(zhuǎn)暴露到公網(wǎng)。
    的頭像 發(fā)表于 11-25 10:22 ?3062次閱讀
    神器!實(shí)現(xiàn)<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b>的幾款工具

    內(nèi)網(wǎng)穿透工具FRP的快速入門

    在計(jì)算機(jī)網(wǎng)絡(luò)中,內(nèi)網(wǎng)穿透是一種通過公網(wǎng)建立安全通道,使得位于內(nèi)網(wǎng)的計(jì)算機(jī)和服務(wù)可以被外部網(wǎng)絡(luò)訪問。對程序員而言,內(nèi)網(wǎng)穿透可以幫助你干什么呢?
    的頭像 發(fā)表于 01-02 11:47 ?621次閱讀

    使用cpolar內(nèi)網(wǎng)穿透本地MariaDB數(shù)據(jù)庫

    本篇教程將使用cpolar內(nèi)網(wǎng)穿透本地MariaDB數(shù)據(jù)庫,并實(shí)現(xiàn)在外公網(wǎng)環(huán)境下使用navicat圖形化工具遠(yuǎn)程連接本地內(nèi)網(wǎng)的MariaDB數(shù)據(jù)庫。
    的頭像 發(fā)表于 01-22 10:28 ?562次閱讀
    使用cpolar<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b>本地MariaDB數(shù)據(jù)庫

    遠(yuǎn)程桌面內(nèi)網(wǎng)穿透是什么?有什么作用?

    遠(yuǎn)程桌面內(nèi)網(wǎng)穿透指的是通過特定技術(shù)手段,將處于內(nèi)網(wǎng)中的電腦或服務(wù)器,通過外部網(wǎng)絡(luò)(互聯(lián)網(wǎng))進(jìn)行訪問。內(nèi)網(wǎng)穿透的主要作用是解決在
    的頭像 發(fā)表于 09-13 08:10 ?326次閱讀
    遠(yuǎn)程桌面<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b>是什么?有什么作用?

    常見的內(nèi)網(wǎng)穿透工具對比

    國內(nèi)的內(nèi)網(wǎng)穿透工具有不少選擇,適合不同的使用場景和需求。以下是一些比較常見的國內(nèi)內(nèi)網(wǎng)穿透工具:
    的頭像 發(fā)表于 11-06 14:59 ?326次閱讀

    ElfBoard技術(shù)貼|如何完成FRP內(nèi)網(wǎng)穿透

    FRP(FastReverseProxy)是一款高效能的反向代理工具,專為解決內(nèi)網(wǎng)穿透問題而設(shè)計(jì)。它能夠?qū)?b class='flag-5'>內(nèi)網(wǎng)中的服務(wù)安全地暴露至公網(wǎng),讓外部用戶輕松實(shí)現(xiàn)遠(yuǎn)程訪問。FRP支持TCP、UDP、HTTP
    的頭像 發(fā)表于 11-08 13:30 ?201次閱讀
    ElfBoard技術(shù)貼|如何完成FRP<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b>