Limour

Limour

临床医学在读。

【探索】基於WebSocket的內網穿透工具

國內的伺服器除了掛個備案,不想再要了。而許多內網的服務需要在外網訪問,內網穿透是必不可少的。但是用國外的伺服器的話,需要過一層未知的東西,難免被誤傷,融入汪洋大海也是必須的。之前折騰了一下通過套一層QUIC來偽裝,不知道為什麼,總是不穩定。尋尋覓覓,又找到一個特徵少的內網穿透工具:ProxyNT 。ProxyNT 是一個用 python 編寫的基於 WebSocket 的反向代理伺服器,可以透過 NAT 和防火牆將本地伺服器暴露到公網上,從原理看,套上一層 CDN 保護公網 IP 也是可以的。

服務端#

mkdir -p ~/app/proxynt && cd ~/app/proxynt && nano Dockerfile && nano docker-compose.yml
docker build -t limour/proxynt .
nano config.json
sudo docker-compose up -d
FROM python:3.9-alpine
RUN pip install -U proxynt
ENTRYPOINT ["nt_server", "-c", "/opt/config.json"]
version: '3.3'
services:
  proxynt:
    restart: unless-stopped
    volumes:
      - './config.json:/opt/config.json'
      - '/etc/localtime:/etc/localtime:ro'
    image: limour/proxynt
 
networks:
  default:
    external: true
    name: ngpm
{
    "port": 18888,
    "log_file": "/dev/null",
    "path": "/websocket_path",
    "password": "helloworld",
    "admin": {
        "enable": true,
        "admin_password": "new_password"
    }
}

msedge_BI9KRyGXTh

客戶端#

mkdir -p ~/app/proxynt && cd ~/app/proxynt
pip install -U proxynt -i https://pypi.tuna.tsinghua.edu.cn/simple
whereis nt_client
nano config.json
nt_client -c config.json # 測試
nano proxynt.service
sudo mv proxynt.service /etc/systemd/system/proxynt.service
sudo systemctl enable proxynt
sudo systemctl start proxynt
sudo systemctl status proxynt
{
  "server": {
    "url": "wss://limour.top:443/websocket_path",
    "password": "helloworld"
  },
  "client_name": "home_pc",
  "log_file": "/home/limour/app/proxynt/nt.log"
}
[Unit]
Description=proxynt
After=network.target
[Service]
ExecStart=/home/limour/miniconda3/bin/nt_client -c /home/limour/app/proxynt/config.json
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
  • 訪問 https://limour.top:443/websocket_path/admin
  • 看到客戶端上線後,新建配置即可

附加 WebSSH#

和上面的內網穿透配合,連接時 host 填proxynt, 可以保證內網 ssh 不暴露公網的同時,又能通過公網進行 ssh 連接。

mkdir -p ~/app/webssh && cd ~/app/webssh && nano docker-compose.yml
sudo docker-compose up -d
version: '3.3'
services:
  webssh:
    restart: unless-stopped
    environment:
      - GIN_MODE=release
      - savePass=true
    volumes:
      - '/etc/localtime:/etc/localtime:ro'
    image: jrohy/webssh:latest
 
networks:
  default:
    external: true
    name: ngpm

msedge_aTYJd5mhvq

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