1. Zerotier

优点:使用最简单,能建立P2P的情况下延迟低,速度快
缺点:实测能建立P2P的情况很少,中转模式下以来国外的Planet根服务器,延迟极高速度极慢不稳定

总结之前的经验来看,只有少数情况下zt可以建立点对点,基本上还是靠中转。自建moon中转效果不明显,可能是需要换个docker镜像。根本解决办法是自建planet。

使用docker自建planet教程
https://blog.csdn.net/u012153104/article/details/131829837?type=blog&rId=131829837&refer=APP&source=koude11

github仓库https://github.com/xubiaolin/docker-zerotier-planet

不能解析地址,ip变动需要全部重新配置
一键部署只支持Linux,windows下要自己想办法

这是一开始采用的命令

docker run -d -v zerotier-app:/app -v zerotier-one:/var/lib/zerotier-one -p 9994:9994 -p 9994:9994/udp -p 3443:3443 --name zerotier-planet --restart unless-stopped xubiaolin/zerotier-planet:latest

这样配置有bug:
管理页面可以登陆但是进入网络配置就会报错
Error retrieving list of networks on this controller: RequestError: connect ECONNREFUSED 127.0.0.1:9994
image

这是后来从deploy.sh中截取的命令,猜测对应替换掉其中的地址可以避免上述报错,但是由于这个镜像不能解析域名,整个项目都是为这个一键部署的脚本适配,自己通过docker命令,发现作者埋了一堆坑,根本发挥不出docker作用,属实过于飞舞。域名解析有多个issue提议,但是甚至不在开发计划中,疑似作者想通过卖他自己的服务赚米,不想尝试了

docker run -d \
        --name ${CONTAINER_NAME} \
        -p ${ZT_PORT}:${ZT_PORT} \
        -p ${ZT_PORT}:${ZT_PORT}/udp \
        -p ${API_PORT}:${API_PORT} \
        -p ${FILE_PORT}:${FILE_PORT} \
        -e IP_ADDR4=${ipv4} \
        -e IP_ADDR6=${ipv6} \
        -e ZT_PORT=${ZT_PORT} \
        -e API_PORT=${API_PORT} \
        -e FILE_SERVER_PORT=${FILE_PORT} \
        -v ${DIST_PATH}:/app/dist \
        -v ${ZTNCUI_PATH}:/app/ztncui \
        -v ${ZEROTIER_PATH}/one:/var/lib/zerotier-one \
        -v ${CONFIG_PATH}:/app/config \
        --restart unless-stopped \
        ${DOCKER_IMAGE}

2. OpenVPN

优点:全部流量都走转发,在国内有公网服务器的情况下非常稳定,且支持域名解析
缺点:延迟比P2P大,带宽收到服务器的限制,服务端配置麻烦,客户端需要证书授权麻烦

Windows Server下搭建:
https://www.cnblogs.com/simonlee-hello/articles/15830715.html#:~:text=%E6%AD%A5%E9%AA%A4%E4%B8%80%EF%BC%9A%E5%AE%89%E8%A3%85Open

原网站防丢存档:

Windows server 2012、2016、2019上搭建openV(亲测成功)

步骤一:安装OpenVPN服务

下载最新版本的OpenVPN服务端,可以从这个地址下载:

Community Downloads | OpenVPN

下载的文件名为:OpenVPN-2.5.5-I602-amd64.msi

双击安装,选择“Customize”

截屏2022-01-20 下午5.41.16

默认情况下不会安装的两个特性,我们需要在安装过程中进行选择。

  • OpenVPN Service
  • OpenSSL Utilities

截屏2022-01-20 下午5.44.20

image-20220120174658478

点击install now

安装完成后,点击close。

这时会弹出一个提醒框,提示没有找到可连接的配置文件,现在不用管它,点击ok即可。

我们打开网络和共享中心,点击更改适配器设置,可以看到多了两个网络连接

image-20220120175236107

步骤二:设置CA证书、生成服务端和客户端的证书和私钥等

找到目录“C:\Program Files\OpenVPN\easy-rsa”,将文件vars.example复制一份改名为vars,“vars”文件包含内置的Easy-RSA配置设置。可以保持默认设置,也可以自定义更改。

属性 | 默认值 | 作用 -- | -- | -- set_var EASYRSA | C:\Program Files\OpenVPN\easy-rsa | Defines the folder location of easy-rsa scripts set_var EASYRSA_OPENSSL | C:\Program Files\OpenVPN\bin\openssl.exe | Defines the OpenSSL binary path set_var EASYRSA_PKI | C:\Program Files\OpenVPN\easy-rsa\pki | The folder location of SSL/TLS file exists after creation set_var EASYRSA_DN | cn_only | This is used to adjust what elements are included in the Subject field as the DN set_var EASYRSA_REQ_COUNTRY | “US” | Our Organisation Country set_var EASYRSA_REQ_PROVINCE | “California” | Our Organisation Province set_var EASYRSA_REQ_CITY | “San Francisco” | Our Organisation City set_var EASYRSA_REQ_ORG | “Copyleft Certificate Co” | Our Organisation Name set_var EASYRSA_REQ_EMAIL | “me@example.net” | Our Organisation contact email set_var EASYRSA_REQ_OU | “My Organizational Unit” | Our Organisation Unit name set_var EASYRSA_KEY_SIZE | 2048 | Define the key pair size in bits set_var EASYRSA_ALGO | rsa | The default crypt mode set_var EASYRSA_CA_EXPIRE | 3650 | The CA key expire days set_var EASYRSA_CERT_EXPIRE | 825 | The Server certificate key expire days set_var EASYRSA_NS_SUPPORT | “no” | Support deprecated Netscape extension set_var EASYRSA_NS_COMMENT | “HAKASE-LABS CERTIFICATE AUTHORITY” | Defines NS comment set_var EASYRSA_EXT_DIR | "$EASYRSA/x509-types" | Defines the x509 extension directory set_var EASYRSA_SSL_CONF | "$EASYRSA/openssl-easyrsa.cnf" | Defines the openssl config file location set_var EASYRSA_DIGEST | "sha256" | Defines the cryptographic digest to use

步骤三:配置ip转发和网络共享

打开注册表,win+R,输入regedit.exe,依次找到:HKEY LOCAL MACHINESYSTEM\CurrentControlSet\Services\Tcpip\Parameters将IPEableRouter值改为1,如下图

image-20220120184135935

然后打开控制面板,找到“控制面板\网络和 Internet\网络连接”,右键点击“以太网”,点击“属性”,在“共享”中钩上“允许其他网络用户通过此计算机的internet连接来连接”,并选择“OpenVPN TAP-Windows6”,点击确定。

image-20220120184424489

image-20220120184527697

步骤四:创建服务端配置文件

首先打开Windows资源管理器,进入C:\Program Files\OpenVPN\sample-config文件夹,将server.ovpn文件复制一份到C:\Program Files\OpenVPN\config目录下。

同时将以下文件一并复制到C:\Program Files\OpenVPN\config目录下

  • ca.crt
  • dh.pem
  • SERVER.crt
  • SERVER.key
  • tls-auth.key

image-20220120185305290

编辑server.ovpn文件,修改以下地方,其他保持默认即可

local x.x.x.x  # 这个是服务器的内网IP地址,或者保持默认
ca ca.crt
cert SERVER.crt
key SERVER.key
dh dh.pem
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 114.114.114.114" # 可以改成其他的DNS服务器
push "dhcp-option DNS 8.8.8.8"
tls-auth tls-auth.key 0 # This file is secret
cipher AES-256-GCM

点击连接,图标变绿就正常。

image-20220120190423076

配置客户端

复制以下文件到你的客户端,并且在同一目录下

  • ca.crt
  • CLIENT.crt
  • CLIENT.key
  • tls-auth.key
  • client.ovpn(“C:\Program Files\OpenVPN\sample-config”)

编辑client.ovpn,修改以下参数,其他保持默认

remote *.*.*.* 1194 # 服务器公网IP地址
ca ca.crt
cert CLIENT.crt
key CLIENT.key
tls-auth tls-auth.key 1
cipher AES-256-GCM

下载对应系统的客户端

OpenVPN Connect Client | Our Official VPN Client | OpenVPN

如windows系统,将client.ovpn文件拖入客户端界面即可,如下

image-20220120191352128

随后点击连接,出现如下界面则表示连接成功

image-20220120191650721

这时ping一下10.8.0.1测试是否连通,ping下百度测试DNS是否正常。

image-20220120191756447

这就成功了。

吊销客户端证书

当我们创建了多个用户使用,然后某些原因,个别用户需要禁用的时候,我们就可以使用吊销证书的方式来处理。

首先在你的OpenVPN服务器上,打开cmd管理员权限窗口,进入目录“C:\Program Files\OpenVPN\easy-rsa\”

cd "C:\Program Files\OpenVPN\easy-rsa"
EasyRSA-Start.bat

进入easyrsa的shell界面

image-20220120192518643

输入以下命令

./easyrsa revoke <client>  # 你要吊销的客户端名
./easyrsa gen-crl # 生成crl.pem文件,用来记录吊销的证书

image-20220120192845049

编辑server.ovpn(“C:\Program Files\OpenVPN\config”下),在行尾加入一行

crl-verify "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\crl.pem" # 用来告知服务端有哪些证书是被吊销的

这一步如果不做则不会生效,添加了这行之后,服务端重连一下即可。

参考:

https://supporthost.in/how-to-setup-openvpn-on-windows-server-2019/

https://www.shangmayuan.com/a/28de9b94188547acb8a48c10.html