內網穿透
🤬什麼是內網穿透
在開始之前先了解什麼是內網穿透吧!
內網穿透就是將內網(可以看作是家庭網路)透過nat
建立一條與公網之間的隧道、將內網的流量透過這條隧道釋出到公網
參考一下內部文章:NAT網路與內網穿透原理
🛠 內網穿透工具
個人嘗試過的工具:
cpolar 此工具只需要安裝客戶端即可且有免費的域名可用、但是免費的域名24小時就會更新、收費的不會
frp 此工具需要有一臺公網的伺服器、需要安裝服務端和客戶端、靈活度高、可自定義域名
HP-PRO 此工具只需安裝客戶端且只需在web端配置即可、有免費的域名、但是這是一個公用的所以很多埠已經被佔用了
- 其它眾多的工具可以參考:github:SexyBeast233/SecBooks
frp工具的使用
服務端
- 先下載服務端和客戶端(https://github.com/fatedier/frp/releases/tag/v0.59.0)
- 解壓後:
- 服務端只需要留下
frps
,frps.toml
兩個檔案即可
- 且
frps.toml
配置:- bindPort = 7000 #指服務端與客戶端連線的埠
- vhostHTTPPort = 8080 #可不配、這裡我用了域名訪問就需要配置這個
- 啟動:
- ./frps -c frps.toml #前臺啟動
- nohup ./frps -c frps.toml & #後臺啟動 (推薦)
客戶端(內網本地)
- 先下載服務端和客戶端(https://github.com/fatedier/frp/releases/tag/v0.59.0)
- 解壓後:保留
frpc
,frpc.toml
- 配置
frpc.toml
檔案:
serverAddr = "x.x.x.x" #公網ip,服務端的ip
serverPort = 7000 #連線服務端的埠
[[proxies]] #代理配置
name = "ssh" #代理名,隨意
type = "tcp" #代理型別有:tcp、udp、http等
localIP = "127.0.0.1" #客戶端本機ip
localPort = 22 #代理本機的哪個埠
remotePort = 6000 #將本機埠對映到伺服器的哪個埠、當訪問服務端的6000埠時相當於訪問本機的22埠
[[ proxies ]]
#如果有多個可以寫多個、但是name必須不同
.....
注意:可以將每個配置分開寫、可以一個服務寫一個檔案、如nginx.toml、mysql.toml等
如多個配置檔案時、啟動:
./frpc -c nginx.toml
./frpc -c mysql.toml
每個都起一個服務即可
這裡再擴充套件一下自定義域名的配置:
如果使用域名訪問需要在服務端的配置檔案中加:vhostHTTPPort = 8080 此8080埠是統一使用域名訪問的埠
這裡方便我就將兩個服務寫在一個配置檔案中了(你可以分開):
serverAddr = "47.120.22.246"
serverPort = 7000
[[proxies]]
name = "N1-web"
type = "http"
localPort = 80
customDomains = ["nginx.xiaoxintops.top"] #使用nginx.xiaoxintops.top:8080 訪問即可訪問內網的80帶你看的nginx
[[proxies]]
name = "N1-web"
type = "http"
localPort = 3306
customDomains = ["mysql.xiaoxintops.top"] #使用mysql.xiaoxintops.top:8080 訪問即可訪問內網的3306帶你看的mysql
我這裡由於域名沒有備案、伺服器又是阿里的,所以域名訪問一次後就不可用了:
注意:上面所有對映的埠都需要在公網的伺服器中放開這個埠的訪問許可權
更多的配置如下:
frp官網
HP PRO 使用
參考官網文件
- 先登入web官網網頁註冊一下拿到
配置的裝置ID
:https://hpproxy.cn/#/home/login
註冊登陸後:點選
對映服務(選擇相應的伺服器使用) -> 到對映裝置(重新整理找到上一步選擇的伺服器-有個裝置ID
) -> 記下這個裝置ID
下面安裝的時候使用
- 這裡我是使用
docker
安裝的:
# 透過 docker run 執行容器 ARM
docker run --restart=always -d -e deviceId=配置的裝置ID registry.cn-shenzhen.aliyuncs.com/hserver/hp-pro:latest-arm64
# 透過 docker run 執行容器 - x86或amd
docker run --restart=always -d -e deviceId=配置的裝置ID registry.cn-shenzhen.aliyuncs.com/hserver/hp-pro:latest
- 配置穿透
-
安裝完後到web登入介面檢視客戶端是否正常線上
-
配置埠對映
先配置對映的埠 - 就是服務端的埠(在公網訪問的埠-不是本機內網服務的埠)
再域名配置、這裡配置的時候可不需要填寫自定義域名
、直接使用他提供的二級域名(測試過自定義域名:配置了CNAME:back1.hpnu.cn 也沒生效)
最後再配置:配置對映
- 如下圖二
圖二:配置對映
提醒:如果在域名配置這裡配置錯了刪掉後、同一個域名可能無法立馬使用、得等解析被釋放後才行
🔗 擴充套件:使用ipv6
- 前提是光貓開啟
ipv6
- 且需要訪問的客戶端也需要支援
ipv6
才行
- 獲取本機的
ipv6
地址、如:2408:xxx:684:fc7e:aedd:97ff:xx47:xxx
- 到cloudflare做DNS解析繫結域名
- 接下來就需要做代理、使用nginx做代理:如
nginx-proxy-manage
- 安裝
docker run -d \
--name=npm-nginx \
-p 8880:80 \
-p 81:81 \
-p 18443:443 \
-v /mnt/mydisk/nginx-proxy-manage/data:/data \
-v /mnt/mydisk/nginx-proxy-manage/letsencrypt:/etc/letsencrypt \
--restart=always \
chishin/nginx-proxy-manager-zh:latest
#英文映象 – jc21/nginx-proxy-manager
#中文映象 – chishin/nginx-proxy-manager-zh
#80是nginx的http埠
#81是web介面埠
#443是https埠
#/data 是一些nginx的配置檔案、如日誌、上傳的證書、資料庫(預設使用sqlite)、等
#/etc/letsencrypt 是let's Encrypt證書、等一些配置檔案
訪問:ip:81
登入使用者名稱:admin@example.com
登入密碼:changeme
- 配置代理:
證書內容可更換為:
提交後等待提交即可(會有點久)
# Cloudflare API credentials used by Certbot
dns_cloudflare_email = cloudflare@example.com #cloudflare的登入郵箱
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234
- 這裡還要結合DDNS-GO 動態ip繫結域名(因為ipv6是會變化的)