# 前言

本教程意在完成异地组网以安全访问内网设备,请勿用于任何非法用途!!!

之前一直使用的 N2N 作为组网工具,但最近老是断链不稳定(答辩校园网),想着换个组网工具试试,然后就找到了这款软件

这款软件其实算是专业的虚拟专用网络建立软件了,兼容 IPsec/L2TP/L2TPv3/OpenVPN 等等

开源地址 https://github.com/SoftEtherVPN/SoftEtherVPN/

官方网站 https://www.softether.org/

下载页面 https://www.softether-download.com/?product=softether 当然也可以从 GitHub 上下载

# 开始

# 服务端

# 下载、编译

首先我们先部署服务端

2023-10-26_231257

下载源码至服务器,解压,进入目录

1
2
3
tar zxf 压缩包名称
cd vpnserver
make

如果未配置 GCC 编译环境请先配置环境

1
2
apt-get update
apt-get install build-essential

将编译完后的文件夹移动至一个方便的地方(当然也可以不移动)

可以选择用户目录或者 /usr/local

自行选择即可

# 配置服务端

编译完成后运行 vpnserver

1
./vpnserver start

当出现

1
2
3
4
5
Let's get started by accessing to the following URL from your PC:

https://xxx:5555/
or
https://xxx/

并且没有其他报错则服务端启动完成

tips: 如果服务器开启了防火墙则请放行 5555 端口

为了方便管理服务端,我们使用官方提供的服务端 GUI 管理程序

当然你也可以使用命令行的方式

1
./vpncmd

来管理服务端(不推荐,因为需要设置的项目比较多 GUI 方便很多)

同样是在下载页面选择 SoftEther VPN Server Manager for Windows

至于要不要使用 installer 版本看你自己喜好

安装完成后我们打开管理程序

选择「新设置」,填写「设置名」(随自己喜好),「主机名」(可以填服务端的 ip 或者域名),「端口号」(默认为 5555,之后更改的话这里也需要同步更改)

「密码」默认是空,不用填写

点击确定后连接


接着会弹出设置服务器密码的窗口(如果已经设置过则不会弹出)

设置完会弹出「SoftEther VPN Server / Bridge 简单安装」的窗口

选择「远程访问 VPN Server」即可(用于点对点组网)

接着会弹出「创建虚拟 HUB 名称」的窗口,用于划分 VLAN(每一个 VLAN 就是一个 HUB)

创建完成后会弹出选一个什么动态 DNS 主机名什么的(就是一个 DDNS),如果不需要就直接点退出(我是自己有域名解析到服务端,所以不需要)

然后在弹出的窗口里选择「L2TP over IPsec」(当然如果你不需要也可以不勾选,后面也是可以重新选择的),用于兼容 L2TP(需要开放相应的端口),Android 目前没有客户端,只能采用这种方式来连接

接着在弹出的窗口选择「禁用 VPN Azure」(因为根本不需要)


接着来到创建用户环节

填写「用户名」,验证类型选择「密码验证」(目前版本无法使用「特定证书认证」,商业版应该支持),填写密码

点击「确定」完成创建用户

关闭用户管理窗口。在管理虚拟 HUB 界面右下角点击「虚拟 NAT 和虚拟 DHCP 服务器」

2023-10-26_234935

选择「启用 SecureNAT」接着选择「SecureNAT 配置」来为我们的 VLAN 内的设备分配虚拟局域网 IP

网段划分如果不知道的话就保持默认设置

在「应用到客户端的选项」一栏,如果你需要使用服务端来转发访问网络(咳咳咳),那么「默认网关地址」就指向 VLAN 中服务端的 IP 地址,DNS 服务器相同

如果仅仅是想组网,则将「应用到客户端的选项」一栏全部清除即可

到这里服务端的基本配置就完成了


这里是额外(可选)配置

在服务端管理主界面「监听器列表」内可以更改监听端口,将 5555 端口更改为你自己喜欢的端口号

关闭 web api(因为目前 web 端管理界面还不完善,留着不如关了)

在「vpn_server.config」配置文件内更改「bool DisableJsonRpcWebApi」的键值为 true,重启即可

在服务端管理主界面「加密与网络」内,更改加密方式,选择合适的加密方式;创建新的 X509 证书,然后导出到本地备用(之后客户端验证证书时会用到)

# 客户端

客户端就没那么多麻烦了(服务端会自动下发配置,很方便)

同样是在下载页面安装适合自己的客户端(本次教程使用 Windows 系统)

然后添加新的连接

连接名主机名什么的填就完了

如果在上面你完成了(可选)配置中的服务端证书生成,则可以在这个界面勾选「总是验证服务端证书」,然后选择「指定特定证书登录」,选择之前保存的那个证书即可

这将极大的加强密钥交换时的安全性

接着选择「通信的高级设置」中的「高级设置」,将 TCP 连接数改为 8(根据你自己的实际情况而定),建议不要取消「使用 SSL 加密 VPN 会话」,不建议裸奔

可以勾选「使用数据压缩」,可能会增加 CPU 额外的开销,但是都 3202 年了难道谁还差这一点 U 的性能开销吗(doge

最后双击或者右键连接

其他 Windows 主机上重复上面设置即可

# Linux 端的使用(额外)

同样是下载页面下载合适的客户端

编译安装方式和服务端是一样的

唯一不同的是 vpnserver 变成了 vpnclient

1
./vpnclient start

启动客户端

我们这里使用 vpncmd 来管理客户端(可以提前将 cmd 语言改为中文,方便之后的设置,具体设置在 lang.config 内)

1
./vpncmd

接着选择「2」来进行 VPN Client 的管理

连接上后输入 help 来查看命令

都是中文就不多介绍什么了

首先输入「NicCreate」来创建新的虚拟 LAN 卡

启用卡「NicEnable」

接着我们从上往下来设置

启用数据压缩「AccountCompressEnable」

创建新的连接配置「ccountCreate」

设置接续设置的高级通信设置「AccountDetailSet」,主要是 TCP 连接数的设置

启用连接设置进行通信的加密「AccountEncryptEnable」,再次重申,不建议裸奔

认证类型设置为密码认证「AccountPasswordSet」

启用连接设置服务器证书验证选项「AccountServerCertEnable」

设置连接设置的服务器固有证明书「AccountServerCertSet」,指向之前保存的证书

禁止 VPN 客户服务的远程管理「RemoteDisable」,出于安全考虑,如果不需要请设置为禁用

使用连接设置,开始连接 VPN Server「AccountConnect」

获取当前连接设置的状态「AccountStatusGet」,查看连接是否成功

如果有连接信息则说明连接成功,但是还没折腾完

这时如果你在服务端查看连接的用户分配的 IP 地址会发现没有被分配 IPv4 地址

因为我们需要手动动态获取 IP 地址(Windows 不用)

输入「ip addr」(此命令请在退出 vpncmd 后使用)来查看我们虚拟网卡名称(默认为 vpn_vpn)

执行「dhclient vpn_vpn」即可

获取到 ipv4 地址后如果无法 ping 通其他主机(无防火墙影响下),则还需要手动增加静态路由

1
2
ip route add 服务器IP地址 via 本地网关地址
ip route del default via 本地网关地址

# 参考

https://blog.csdn.net/Variazioni/article/details/127004628

https://blog.csdn.net/qq_40166810/article/details/127606027

https://zhuanlan.zhihu.com/p/414145546