chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

P2P內(nèi)網(wǎng)穿透工具的使用

dyquk4xk2p3d ? 來源:良許Linux ? 作者:良許Linux ? 2022-11-24 10:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

be0806d8-6b87-11ed-8abf-dac502259ad0.png

從這張圖上可以看出, 你的 “工作筆記本” 和 “家庭 NAS” 之間通訊的最大傳輸速度為 Up/Down: 512K/s; 因為流量經(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ā)送流量后, 整個鏈路上的防火墻會短時間打開一個映射規(guī)則, 該規(guī)則允許 B 設(shè)備短暫的從這個路徑上反向向 A 設(shè)備發(fā)送流量. 更通俗的講大概就是所謂的: “順著網(wǎng)線來打你”

be12eb2a-6b87-11ed-8abf-dac502259ad0.png

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

be1d8a76-6b87-11ed-8abf-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)時, 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.1、配置 Headscale

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

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

#Headscale實際監(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:""

#使用自定義證書時的證書路徑
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 時一定會進(jìn)行 ACME 申請

3、在不配置 tls_letsencrypt_hostname 時如果配置了 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ù)載均衡器配置時, 啟動后會有一行警告日志, 忽略即可:

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)于選項設(shè)置:

--login-server:#指定使用的中央服務(wù)器地址(必填)
--advertise-routes:#向中央服務(wù)器報告當(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ù)器訪問地址; 瀏覽器訪問該地址后將會得到一條命令:

be2b44d6-6b87-11ed-8abf-dac502259ad0.png

?

be34973e-6b87-11ed-8abf-dac502259ad0.png

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

be3f0d04-6b87-11ed-8abf-dac502259ad0.png

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

4.2、MacOS 客戶端

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

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

be4c465e-6b87-11ed-8abf-dac502259ad0.png

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

第二種方式也是比較推薦的方式, 直接編譯客戶端源碼安裝, 體驗與 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 具體的安裝流程請訪問 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 上, 同時會觸發(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 選項即可(占用 443 端口), 如果期望通過負(fù)載均衡器負(fù)載, 則需要將 -a 選項指定到非 443 端口, 然后配置 Nginx、Caddy 等 LB 軟件即可. 最后一點(diǎn) stun 監(jiān)聽的是 UDP 端口, 請確保防火墻打開此端口.

5.2、配置 Headscale

在創(chuàng)建完 Derper 中繼服務(wù)器后, 我們還需要配置 Headscale 來告訴所有客戶端在必要時可以使用此中繼節(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)開啟了客戶端驗證, 所以請確保 /var/run/tailscale 內(nèi)存在已加入 Headscale 成功的 tailscaled 實例的 sock 文件. 其他具體環(huán)境變量等參數(shù)配置請參考 Earthfile.

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

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

6.1、Ping 命令

tailscale ping 命令可以用于測試 IP 連通性, 同時可以看到時如何連接目標(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)境; 此時可以使用tailscale netcheck命令來檢測當(dāng)前的網(wǎng)絡(luò)環(huán)境, 此命令將會打印出詳細(xì)的網(wǎng)絡(luò)環(huán)境報告:

~???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)代理工具時, 如果安裝 App Store 的官方圖形化客戶端, 則可能與這些軟件沖突, 推薦使用純命令行版本并添加進(jìn)程規(guī)則匹配 tailscale 和 tailscaled 兩個進(jìn)程, 讓它們始終走 DIRECT 規(guī)則即可.

7.2、MacOS 下 CPU 占用突然起飛

在使用一些網(wǎng)絡(luò)代理工具時, 網(wǎng)絡(luò)工具會設(shè)置默認(rèn)路由; 這可能導(dǎo)致 tailscaled 無法獲取到默認(rèn)路由接口, 然后進(jìn)入死循環(huán)并把 CPU 吃滿, 同時會與 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ī)則并重新編譯.

be636a00-6b87-11ed-8abf-dac502259ad0.png

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

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

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

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

以上兩個選項配置后, 只需要 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 很多選項很模糊, 可能需要閱讀源碼以后才能知道到底應(yīng)該怎么做.

審核編輯:郭婷

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

    關(guān)注

    13

    文章

    9793

    瀏覽量

    87947
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3837

    瀏覽量

    116670

原文標(biāo)題:一款超牛逼的 P2P 內(nèi)網(wǎng)穿透神器(附安裝、使用教程)

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    【Banana Pi BPI-RV2開發(fā)板試用體驗】部署內(nèi)網(wǎng)穿透

    ,這樣就可以通過SSH遠(yuǎn)程鏈接家里的網(wǎng)關(guān)設(shè)備了。 frp 是什么? frp 是一款高性能的反向代理應(yīng)用,專注于內(nèi)網(wǎng)穿透。它支持多種協(xié)議,包括 TCP、UDP、HTTP、HTTPS 等,并且具備 P2P
    發(fā)表于 06-29 20:05

    為什么90%的企業(yè)內(nèi)網(wǎng)穿透方案其實在“裸奔”?

    數(shù)據(jù)! 一、這些風(fēng)險你是否正在經(jīng)歷? 1、工具選擇:開源≠安全,免費(fèi)≠可靠 案例:某制造企業(yè)使用開源FRP自建穿透服務(wù),因未及時更新內(nèi)核漏洞,導(dǎo)致黑客通過SSH隧道竊取生產(chǎn)數(shù)據(jù)庫。? 2、配置缺陷:
    的頭像 發(fā)表于 05-22 11:21 ?189次閱讀

    內(nèi)網(wǎng)穿透目前最好的解決方案?ZeroNews憑什么!

    無論是個人想要遠(yuǎn)程訪問家中的設(shè)備,還是企業(yè)實現(xiàn)高效的遠(yuǎn)程辦公與資源共享,內(nèi)網(wǎng)穿透都是關(guān)鍵所在。然而,傳統(tǒng)的內(nèi)網(wǎng)穿透方案卻問題重重,企業(yè)急需新的選擇。 1. 傳統(tǒng)方案 ① 公網(wǎng)IP:成本
    的頭像 發(fā)表于 05-15 14:14 ?233次閱讀
    <b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b>目前最好的解決方案?ZeroNews憑什么!

    這么多內(nèi)網(wǎng)穿透工具怎么選?一篇讓你不再糾結(jié)的終極指南!

    穿透工具就是你的救星! 但問題來了—— 市面上這么多工具,Ngrok、FRP、ZeroNews……到底該選哪個? 別急,這篇文章將帶你全面了解各種內(nèi)網(wǎng)
    的頭像 發(fā)表于 05-13 16:06 ?371次閱讀
    這么多<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b><b class='flag-5'>工具</b>怎么選?一篇讓你不再糾結(jié)的終極指南!

    請問TSC2014IYZGT和TSC2017IYZGR是否可以P2P替換?

    您好,請問TSC2014IYZGT和TSC2017IYZGR是否可以P2P替換?
    發(fā)表于 11-21 08:00

    內(nèi)網(wǎng)穿透詳解:從傳統(tǒng)方式到P2link的優(yōu)勢探討

    新興的 p2link技術(shù)為內(nèi)網(wǎng)穿透提供了更為高效、安全的解決方案。本文將為你詳細(xì)介紹內(nèi)網(wǎng)穿透的原理、傳統(tǒng)解決方案,并探討
    的頭像 發(fā)表于 11-13 14:19 ?854次閱讀

    P2link內(nèi)網(wǎng)穿透兩大亮點(diǎn)—不限速使用—多設(shè)備集中管理

    引言 P2link是一款采用了P2P技術(shù)和穿透協(xié)議,面向高性能需求的內(nèi)網(wǎng)穿透工具,各節(jié)點(diǎn)(用戶或
    的頭像 發(fā)表于 11-11 14:28 ?757次閱讀

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

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

    一款高性能內(nèi)網(wǎng)穿透工具——P2link

    P2link是一款面向高性能需求的內(nèi)網(wǎng)穿透工具,采用了P2P技術(shù)和穿透協(xié)議,各節(jié)點(diǎn)(用戶或設(shè)備)
    的頭像 發(fā)表于 11-08 10:59 ?1763次閱讀
    一款高性能<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b><b class='flag-5'>工具</b>——<b class='flag-5'>P2</b>link

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

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

    P2link——強(qiáng)大的內(nèi)網(wǎng)穿透和遠(yuǎn)程訪問工具

    P2Link作為一款強(qiáng)大的內(nèi)網(wǎng)穿透和遠(yuǎn)程訪問工具,可以幫助用戶輕松實現(xiàn)網(wǎng)絡(luò)連接和數(shù)據(jù)傳輸。特別適用于在復(fù)雜網(wǎng)絡(luò)環(huán)境中需要遠(yuǎn)程訪問內(nèi)網(wǎng)資源的場
    的頭像 發(fā)表于 11-01 14:21 ?1028次閱讀

    打破網(wǎng)絡(luò)邊界:P2Link助力實現(xiàn)高效遠(yuǎn)程訪問與內(nèi)網(wǎng)穿透

    P2Link作為一種高效的內(nèi)網(wǎng)穿透解決方案,通過其強(qiáng)大的功能、簡單的配置和高效的傳輸技術(shù),幫助用戶打破了內(nèi)網(wǎng)與外網(wǎng)之間的界限。無論是遠(yuǎn)程辦公、物聯(lián)網(wǎng)管理,還是智能家居控制,
    的頭像 發(fā)表于 10-31 11:59 ?635次閱讀

    打破網(wǎng)絡(luò)邊界:P2Link助力實現(xiàn)高效遠(yuǎn)程訪問與內(nèi)網(wǎng)穿透

    不加密,可能會導(dǎo)致敏感數(shù)據(jù)被截取。 為了解決這些問題,內(nèi)網(wǎng)穿透工具P2Link應(yīng)運(yùn)而生,為遠(yuǎn)程訪問提供了簡單、安全且高效的解決方案。 P2
    發(fā)表于 10-31 11:54

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

    的計算機(jī)或服務(wù)。內(nèi)網(wǎng)穿透適合什么人?1、遠(yuǎn)程辦公人員:當(dāng)公司內(nèi)部的辦公網(wǎng)絡(luò)無法直接訪問時,遠(yuǎn)程辦公人員需要通過內(nèi)網(wǎng)穿透技術(shù)從外部訪問公司內(nèi)部的電腦和服務(wù)器。
    的頭像 發(fā)表于 09-13 08:10 ?936次閱讀
    遠(yuǎn)程桌面<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b>是什么?有什么作用?

    這個組網(wǎng)、內(nèi)網(wǎng)穿透工具遠(yuǎn)程連接是真的牛!

    這一局限,實現(xiàn)遠(yuǎn)程連接與訪問,我們引入了內(nèi)網(wǎng)穿透這一技術(shù)手段。那么,內(nèi)網(wǎng)穿透究竟是什么呢? 內(nèi)網(wǎng)穿透
    的頭像 發(fā)表于 08-19 16:08 ?693次閱讀
    這個組網(wǎng)、<b class='flag-5'>內(nèi)網(wǎng)</b><b class='flag-5'>穿透</b><b class='flag-5'>工具</b>遠(yuǎn)程連接是真的牛!