概述

  • 在非局域網環境想要訪問家中局域網機器的方案:
  • 方案一:運營商側開通固定IP,現在一般很少提供給家用寬帶,所以文中不提及這種方案
  • 方案二:使用內網穿透
  • 方案三:搭建虛擬局域網
  • 方案四:域名綁定IPV6(推薦)

方案二

使用花生殼等第三方提供的軟件,優點是簡單方便,但是缺點也很明顯:流量較少、帶寬較低。也可充值解鎖更高的體驗

frp內網穿透工具

  • 需要一台公網服務器作為出入口
  • 安裝frp的方法網上很多,這裏我們提供docker以及docker-compose的方法,沒有docker基礎的小夥伴可以去我docker文章瞭解或者使用別的原生安裝方式

服務端frps

步驟

  • 任意位置創建文件夾frps
  • 在文件夾下創建文件frps.ini
[common]
# 監聽端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登錄面板賬號設置
dashboard_user = admin
dashboard_pwd = 密碼
# 設置http及https協議下代理端口(非重要)
vhost_http_port = 7080
vhost_https_port = 7081

# 身份驗證
token = 12345678
  • 運行容器
    服務器鏡像:snowdreamtech/frps
    重啓:always
    網絡模式:host
docker run --restart=always --network host -d -v /usr/local/docker-mapping/frps/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

本地中轉端frpc

  • 任意位置創建文件夾frpc
  • 在文件夾下創建文件frpc.ini
[common]
# server_addr為FRPS服務器IP地址
server_addr = xxx.xxx
# server_port為服務端監聽端口,bind_port
server_port = 7000
# 身份驗證
token = 12345678

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2288

# [ssh] 為服務名稱,此處設置為,訪問frp服務端的2288端口時,等同於通過中轉服務器訪問127.0.0.1的22端口。
# type 為連接的類型,此處為tcp
# local_ip 為中轉客户端實際訪問的IP 
# local_port 為目標端口
# remote_port 為遠程端口
  • 下載鏡像:
docker pull snowdreamtech/frpc
  • 若是報“Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker”,修改dns服務器地址:vim /etc/sysconfig/network-scripts/ifcfg-ens33 這裏換成你自己的網卡,然後添加dns地址114,或者8.8.8.8
  • 若還是報錯,查看是否有文件vim /etc/resolv.conf,若有也加上(未測試,網上資料這麼説)
  • 運行容器
docker run --restart=always --network host -d -v /root/docker-compose/frpc/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc

服務器鏡像:snowdreamtech/frpc
重啓:always
網絡模式:host

也可以使用docker-compose的方式 安裝FRP中轉端(推薦)

  • docker-compose.yml
version: '3'
services:
  frpc:
    image: snowdreamtech/frpc
    container_name: frpc
    restart: always
    network_mode: host
    volumes:
    - ./frpc.ini:/etc/frp/frpc.ini
  • 啓動容器
docker-compose up -d

方案三

搭建虛擬局域網,文中介紹組件:Zerotier
目前沒有找到能夠自行搭建總服務器的辦法,都會走官方服務器,網絡沒有辦法得到保證,所以也沒有深入去研究,不過對於網絡要求沒那麼高的用户來説也夠用

服務端

  • 創建(偽)根服務器ztncui
  • 項目地址:https://github.com/Jonnyan404/zerotier-planet
docker run --restart=on-failure:3 -d --name ztncui -e HTTP_PORT=4000 -e HTTP_ALL_INTERFACES=yes -e ZTNCUI_PASSWD=mrdoc.fun -p 4000:4000 keynetworks/ztncui
  • 初始賬號密碼為:admin mrdoc.fun
  • 更改密碼後,創建一個網絡
  • 網絡id
  • 生成內網ip

創建 moon 服務器

  • 項目地址:https://github.com/jonnyan404/docker-zerotier-moon
  • 創建容器
docker run --name zerotier-moon -d -p 9993:9993 -p 9993:9993/udp -v /usr/local/docker-mapping/zerotier/:/var/lib/zerotier-one jonnyan404/zerotier-moon -4 xxx.xxx.xxx.xxx公網ip
  • 打開公網服務器的9993端口,tcp和udp全部打開
  • 查看moon ID
docker logs zerotier-moon

客户端

windows

  • 官網下載軟件
  • 輸入網絡id
  • 在web管理端同意
  • Windows 客户端加入moon服務器
cd C:\ProgramData\ZeroTier\One
zerotier-cli orbit [moon_id] [moon_id]
  • 查看連接節點
zerotier-cli listpeers

linux

  • 安裝
curl -s https://install.zerotier.com | sudo bash

方案四

這個是目前比較推薦的方案,目前很多設備已經逐步兼容ipv6,且運營商也是免費提供

電腦端

  • 在線測試本機是否支持ipv6,若是下圖的結果則説明你的電腦是正常支持ipv6的,若不是則前往網絡和共享中心-更改適配器設置-屬性-Internet協議版本6(TCP/IPv6)中設置開啓
  • ARM 虛擬機使用同一個公共 IP 訪問公網的解決方案_#網絡

  • 使用ipconfig查看ipv6地址(linux是ifconfig)
  • 此時便可在任意有網絡的環境使用這個地址對你的電腦進行訪問:[xxxx:8a1e:xxxx:1980:fc3b:9dff:9e1b:xxxx]:端口,若無法訪問可能是路由器端禁止了。

路由器端設置

  • 大部分無法訪問,還需要對路由器端進行設置
  • 在局域網登錄路由器網關配置頁面,在路由器底部標籤上會有寫,例如:192.168.1.1,賬號密碼標籤上有寫
  • 每個路由器需要設置的界面也不一樣,我這邊只需要將 IPv6Session防火牆開關 關掉後重啓即可
  • 這裏光貓器是用的路由模式,如果你的局域網是基於光貓拓展的路由器,那麼需要將光貓設置為橋接模式,讓它只負責將光信號轉換為電信號,路由的功能則交給後續路由器。如果局域網是基於光貓的,那麼就無需操作。
  • 這個時候沒有了路由器的攔截,你的電腦已經完全暴露在公網之中,雖然説IPV6數量很大難以被發現,但還是儘量做好電腦的防火牆設置,而且要儘量避免將電腦的IPV6地址告知非信任方。

域名

  • 這裏我使用的騰訊雲
  • 首先要在域名註冊中註冊一個域名,有貴的有便宜的,便宜的幾塊錢一年,看自己的情況選購,記得把自動續費去掉,因為一般第二年嘎嘎貴。
  • 支付成功後需要填寫信息審核,這個正常時間段會很快,一小時不到就可以完成
  • 然後進入域名管理或者DNSPOD頁面,就能看到自己的域名,點擊解析後添加一條記錄,主機記錄為域名訪問的前綴,類型為AAAA代表IPV6,記錄值為你的IPV6地址
  • 點擊確認,數秒後便可使用你的域名進行訪問:demo.你的域名:端口(80等端口一般會被默認禁用,而且IPV6完全暴露公網中,所以儘量避免使用常用端口)

DDNS

  • ipv6默認一般是動態的,重新撥號後地址會變,所以我們需要使用域名+DDNS將訪問地址固定
  • 這裏我們使用開源項目ddns-go
  • 根據自己的設備配置下載對應的包
  • 下載後解壓到自己記得住的位置,然後運行ddns-go程序,會自動打開設置頁面,然後填寫賬號密碼後進入(首次進入輸入的賬號密碼則為後續密碼,可在頁面中修改)
  • 點擊 創建 DNSPod Token ,跳轉到dnspod頁面,點擊創建密鑰。創建密鑰後,將id和token填入DDNS的配置中,然後將IPV4去掉
  • 在IPV6中輸入你的域名
  • 點擊保存,現在可以重啓下路由器測一下是否生效了(DDNS同步會有延遲,需要等待幾分鐘)
  • 若沒有問題,將程序設置為開機自啓,則大功告成

LINUX環境

  • 按照自己的設備,下載對應的包
# 將包放在你覺得合適的位置後解壓
tar -zxvf ddns-go_6.7.7_linux_x86_64.tar.gz
# 配置成服務,自啓動
cd /etc/systemd/system
touch ddns-go.service
vim ddns-go.service
  • ddns-go.service文件內容:
[Unit]
Description=ddns-go

[Service]
ExecStart=nnds-go所在路徑

[Install]
WantedBy=multi-user.target
# 服務生效,若非管理員賬號則加sudo
systemctl enable ddns-go.service
systemctl start ddns-go.service
  • 此時已經完成,只需要重啓電腦測試一下後進入配置頁面,像windows一樣配置即可

寫在最後

  • 本方案適合有一定計算機常識的同學操作。
  • 僅技術交流,不對由此產生的任何損失負責。
  • 有什麼問題可以留言。