啥是内网穿透?#
当我们在家中有个 NAS,想要在学校 / 公司的网络来访问,就需要用到内网穿透,实现外网访问内网服务。原理一般是 P2P 打洞和服务器中转流量
前期准备#
路由器开启 UPnP
关闭路由器的 IPv4,IPv6 防火墙
使用 Zerotier/Tailscale 进行内网穿透#
他们俩的原理都是尝试对端建立 P2P 连接,需要对端安装一个软件并且长期运行
使用 Zerotier 进行内网穿透的详细教程#
创建 Zerotier 账号#
账号创建都不会的给我去死
创建一个新的 Zerotier 网络组#
当你账号登录成功后,会自动跳转到这个页面,点击Create A Network
。如果没有,请访问ZeroTier Central
下面的列表会增加一个新的网络组,点击它
Zerotier 默认的网络组模式为Private
。即私密模式,哪怕别人知道了你的Network ID
尝试加入你的网络组也需要你进行验证
复制Network ID
。后续我们就用这个加入网络组
在设备上安装 Zerotier 应用#
Windows:#
前往Download - ZeroTier,下载 exe 安装文件
安装完毕后查看右下角托盘,按照图片操作加入网络组
这里可以查询到你的设备 ID 和你在这个网络组的 IP
Linux(飞牛 OS):#
通过 SSH 连接上你的 Linux 设备
查看安装命令:Download - ZeroTier
终端执行: curl -s https://install.zerotier.com | sudo bash
看到这一行即安装完毕,后面那一串即你的设备 ID:
加入网络:sudo zerotier-cli join 你的Network ID
Android(安卓)#
下载客户端
-
Zerotier One:ZeroTier One APK Download for Android - Latest Version
-
ZerotierFix:Releases · kaaass/ZerotierFix
如图操作
Zerotier 授权设备#
前往 Zerotier 的网页控制台:ZeroTier Central
授权刚才加入的设备
勾选然后保存
Zerotier 访问测试#
如果你同一个网络组里已经有两台以上的设备了,可以尝试 ping 一下测试连通性,请先确保两台设备不在同一个局域网(比如手机开流量,NAS 用家里的无线网)
IP 可以在这里查看
ping 测试:
使用 Tailscale 进行内网穿透的详细教程#
创建 Tailscale 账号#
前往:Tailscale。如果你进不去,请尝试挂梯子。如果看不懂英文可以开启浏览器的翻译功能
在设备上安装 Tailscale 应用#
Windows:#
前往Download · Tailscale,下载 exe 安装文件
官方教程:
Linux(飞牛 OS):#
通过 SSH 连接上你的 Linux 设备
查看安装命令:Download · Tailscale
终端执行: curl -fsSL https://tailscale.com/install.sh | sh
等待安装完毕后输入:tailscale login
打开弹出的浏览器窗口,登录你的账号即可
Android(安卓)#
下载客户端(Google Play):Download · Tailscale
登录你的账号即可
Tailscale 访问测试#
前往 Tailscale 的网页控制台:Machines - Tailscale。可以查看到每个设备 Tailscale 分配的 IP
ping 测试:
使用 Cloudflare Tunnel 进行内网穿透#
这种方法可以不进行任何配置直接在公网上被访问,但是仅限 Web 服务。如果你想穿透游戏服务器等则不可用。你需要先将域名托管到 Cloudflare
创建 Cloudflare 账号主页 | Cloudflare
进入Cloudflare One(需要绑定 PayPal)
如图操作,创建一个 Tunnel
Docker 方式#
使用 1Panel
复制如图的命令
将其粘贴,并且复制后面的令牌
1Panel 应用商店搜索cloudflared
填入令牌
查看 cloudflared 的 IP#
如果你是 Docker 模式,宿主机 IP 需要通过 SSH 终端输入ip a
来查看。我这里是192.168.124.34
root@n100-debian:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens18: tiROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether bc:24:11:33:e1:7d brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 192.168.124.34/24 brd 192.168.124.255 scope global dynamic ens18
valid_lft 46579sec preferred_lft 46579sec
inet6 2409:8a30:320:a170:be24:11ff:fe33:e17d/64 scope global dynamic mngtmpaddr
valid_lft 1902sec preferred_lft 1898sec
inet6 fe80::be24:11ff:fe33:e17d/64 scope link
valid_lft forever preferred_lft foreverti
原生模式(以 Debian 为例)#
选择 Debian,然后复制底下的命令,直接到终端执行
如果你的环境无法连接上 Github
尝试手动下载:https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
然后将其通过 SSH 等方式传到 Linux 上,如图终端为 MobaXterm
然后使用:dpkg -i cloudflared-linux-amd64.deb
安装这个软件包
然后直接复制右边的命令到 SSH 终端执行
Android(Termux)#
在 Android 上安装Termux | The main termux site and help pages.
在终端执行:pkg install cloudflared
选择Debian
然后复制最右边的命令到终端执行
如果你无法使用 Termux 自带的 cloudflared,请尝试安装 proot 容器实现
依次输入命令:
pkg update && pkg upgrade
pkg install proot
pkg install proot-distro
proot-distro list
proot-distro install debian
proot-distro login debian
apt install wget
wget https://github.com/cloudflare/cloudflared/releases/download/2024.10.1/cloudflared-linux-arm64.deb
dpkg -i cloudflared-linux-amd64.deb
然后直接复制右边的命令到 SSH 终端执行
配置并访问 Tunnel#
通过网页配置#
这种方法需要直接在安装了 cloudflared 的设备上通过令牌运行
如图进入,创建一个 HTTP 隧道
填写你的 IP 和端口,非 Docker 模式可以直接填写 localhost
本地方式#
这种方法只需要在安装了 cloudflared 的设备上输入一些命令然后通过网页授权,后续更改配置也需要在本地操作
登录并授权:cloudflared tunnel login
创建隧道并设置隧道(HTTP 模式穿透,目标地址127.0.0.1
,端口:8080
,外部域名:test.onani.cn
):cloudflared tunnel --name test --url http://127.0.0.1:8080 --http2 --hostname test.onani.cn
访问测试#
成功访问
使用 STUN 打洞#
这种方法可以不进行任何配置直接在公网上被访问,并且所有类型的服务都能正常使用。但是这种方式进行的内网穿透无法固定也无法指定 IP 和端口,在 3~7 天后会改变
安装 Lucky#
执行:curl -o /tmp/install.sh http://6.666666.host:6/files/golucky.sh && sh /tmp/install.sh http://6.666666.host:6/files 2.13.4
通过host:16601
进入 Lucky 后台,设置 STUN 穿透。如果 DMZ 主机不设为 Lucky 主机可能会失败。打码的地方即公网访问的 IP 和端口