Skip to content

内网穿透大记录

因为很多很多的原因,我时常要远程控制一下在家里和在出租房内的电脑,但我家里是要不到公网地址的移动,我出租屋是在两层nat后面的房东网络,内网穿透就成为了我几乎必备的方案。

试过很多种内网穿透方案,最早的时候,我使用过向日葵远程控制免费版,但是那个版本,速率低质量差,唯一的好处是国内的服务器,不需要担心家里的移不动连不上服务器。

之后使用了teamviewer个人免费版,用起来还行,比起向日葵来说好了一点,但不爽的是teamviewer的远程图像质量也是一般,而且远程连上之后会导致桌面变成纯黑色。

在去年,正式的把远程方式换成了真正的内网穿透模式,在aliyun的服务器上搭建了frps,也就是frp的服务端,使用上了真正的内网端口转发的模式连接,这样可以不需要额外安装远程控制软件,就可以使用微软自带的远程桌面连接到内网后的PC。

但终究frp是一个基于TCP转发方式的端口转发工具,所有的连接都使用了服务器作为中转,这样对使用依然有一定的影响,于是我现在,更换成了ZeroTier穿透方式,在这里记录一下使用Windows作为客户端时,搭建ZeroTier的一些坑和注意事项。

下载就不说了,直接下载msi安装包即可,在远程桌面上直接安装可能会有点小问题,官方推荐的安装方法,是使用管理员权限的cmd安装

msiexec /i "ZeroTier One.msi"

安装完成以后,会有两个路径需要注意,分别是

C:\Program Files (x86)\ZeroTier\One

这一个路径是命令的安装路径,之后的命令都以这个路径为根路径输入

C:\ProgramData\ZeroTier\One

这是配置文件的路径,配置文件以及ZeroTier的本体都在这个路径里面

首先,你需要在官方的面板网站上注册一个网络ID账号,登录之后点击Network区段,里面应该默认已经创建好了一个网络区块,点击进入这个区块,先不要关闭页面

之后在ZeroTier One的软件操作界面,点击右键Join Network...输入Network ID,就可以加入网络区块了,之后在面板内,找到Members,勾选你刚刚加入的网络设备,那么这台设备就加入你的ZeroTier局域网内了。

Moon在Windows上的配置

重点来了,如果不配置私有Moons服务器,所有的ZeroTier网络服务器都是在国外的,对于国内的用户十分的不友好,那么这个时候就需要我们加入一个拥有国内公网的服务器,来加速ZeroTier的网络互联速度。

由于我的Aliyun服务器是Windows Servers,所以在全都是Linux的教程里面踩了不少坑。

首先是生成配置文件,网上的教程是

zerotier-idtool initmoon identity.public > moon.json

在Windows上你需要使用管理员权限的CMD进入安装路径执行,但你会遇到第一个错误

identity.public is not a valid identity

你会发现路径里没有identity.public这个文件,其实这个文件在ZeroTier的配置路径下,所以你需要执行

zerotier-idtool initmoon "C:\ProgramData\ZeroTier\One\identity.public" > moon.json

之后在"stableEndpoints"中配置好公网IP,切记端口只能是9993,在网上查到了修改端口的方法,但我本身没有尝试过;修改方法为:

在运行程序同级目录下建立local.conf文件:

{
    "settings":
    {
        "primaryPort":9994
    }
}

local.conf 完整配置示例如下:

{
    "physical": { /* Settings that apply to physical L2/L3 network paths. */
        "NETWORK/bits": { /* Network e.g. 10.0.0.0/24 or fd00::/32 */
            "blacklist": true|false, /* If true, blacklist this path for all ZeroTier traffic */
            "trustedPathId": 0|!0 /* If present and nonzero, define this as a trusted path (see below) */
        } /* ,... additional networks */
    },
    "virtual": { /* Settings applied to ZeroTier virtual network devices (VL1) */
        "##########": { /* 10-digit ZeroTier address */
            "try": [ "IP/port"/*,...*/ ], /* Hints on where to reach this peer if no upstreams/roots are online */
            "blacklist": [ "NETWORK/bits"/*,...*/ ] /* Blacklist a physical path for only this peer. */
        }
    },
    "settings": { /* Other global settings */
        "primaryPort": 0-65535, /* If set, override default port of 9993 and any command line port */
        "portMappingEnabled": true|false, /* If true (the default), try to use uPnP or NAT-PMP to map ports */
        "softwareUpdate": "apply"|"download"|"disable", /* Automatically apply updates, just download, or disable built-in software updates */
        "softwareUpdateChannel": "release"|"beta", /* Software update channel */
        "softwareUpdateDist": true|false, /* If true, distribute software updates (only really useful to ZeroTier, Inc. itself, default is false) */
        "interfacePrefixBlacklist": [ "XXX",... ], /* Array of interface name prefixes (e.g. eth for eth#) to blacklist for ZT traffic */
        "allowManagementFrom": "NETWORK/bits"|null, /* If non-NULL, allow JSON/HTTP management from this IP network. Default is 127.0.0.1 only. */
        "allowTcpFallbackRelay": true|false /* Allow or disallow establishment of TCP relay connections (true by default) */
    }
}

之后生成moon文件

zerotier-idtool genmoon moon.json

之后会在安装路径下生成一个类似000000xxxxx.moon的文件

然后在配置路径下,新建一个moons.d文件夹,将moon文件移动到这个文件夹内

重启ZeroTier服务

这是Windows的第二个坑,你会发现退出ZeroTier One软件,其实ZeroTier服务还是没有退出,依然在后台运行,网上的教程有说重启电脑的,那是一种解决方法,但其实真正的重启服务的方法应该是,打开Windows内部的服务控制器,运行services.msc,在里面找到ZeroTier One服务,手动停止并重新启动,这样就完成了ZeroTier One的重启流程。

客户端方面,也是只需要将moon配置文件放到相同的位置,按照相同的方法重启就可以了。

Published in技术探究

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注