SoftEther 简介

SoftEther VPN 是 SoftEther VPN Project 提供的下一代 VPN 通信软件的最新版本,具有稳定性、灵活性和可扩展性。 SoftEther VPN 使用户能够使用 IP 通信网络安全地创建一个高性能的虚拟专用网络 (VPN),其中互联网是典型的例子。 VPN 技术可以在从商业应用程序通信到面向个人和家庭使用的网络的各个领域中得到最大利用。

开源软件

SoftEther VPN 服务器、客户端和网桥是免费软件,并作为开源发布。 您可以根据 Apache License 2.0 的条款重新分发和/或修改它们。

支持多种VPN协议

SoftEther VPN Server 除了支持自己的VPN协议之外还支持很多常用的VPN协议。使用其他协议的VPN客户端可以无缝迁移到SoftEther。目前支持以下协议:

  • SoftEther VPN Protocol (Ethernet over HTTPS)
  • OpenVPN (L3-mode and L2-mode)
  • L2TP/IPsec
  • MS-SSTP (Microsoft Secure Socket Tunneling Protocol)
  • L2TPv3/IPsec
  • EtherIP/IPsec

更多协议细节参考官方文档:https://www.softether.org/3-spec#VPN_Protocols_Supported_by_SoftEther_VPN_Server

支持多种操作系统

操作系统方面SoftEther支持多种操作系统:

  • Windows:从 Windows 98 到 Windows 11 的多个桌面和服务器版本
  • Linux:
  • Max OS:Mac OS X 10.4 以上版本
    部分支持更多操作系统:
  • FreeBSD
  • NetBSD
  • OpenBSD
  • Solaris

而借助支持的多种VPN协议(例如L2TP)还可以支持IOS和Android等操作系统。

支持多种CPU硬件

支持多种CPU:

  • x86/x64
  • ARM32/64
  • PowerPC 32/64
  • SPARC 32/64
  • MIPS 32

可靠性

支持高可用性和集群负载均衡

系统需求

服务器硬件需求:

  • Free RAM
    Minimum: 32Mbytes + 0.5Mbytes * (Number of Concurrent VPN Sessions)
    Recommended: 128Mbytes + 0.5 Mbytes * (Number of Concurrent VPN Sessions)

  • Free Disk Space
    Minimum: 100Mbytes
    Recommended: 2Gbytes (for daily VPN connection logs)

客户端硬件需求

  • Free RAM
    Minimum: 16Mbytes
    Recommended: 32Mbytes

SoftEther 部署

软件环境

通常我们会在服务器上部署VPN Server,而常用的服务器操作系统是Linux,在Linux上部署 SoftEther 需要进行部分编译链接工作,依赖于编译工具和相关的库,包括以下软件:

  • gcc software
  • binutils software
  • tar, gzip or other software for extracting package files
  • chkconfig system utility
  • cat, cp or other basic file operation utility
  • EUC-JP, UTF-8 or other code page table for use in a Japanese language environment
  • libc (glibc) library
  • zlib library
  • openssl library
  • readline library
  • ncurses library
  • pthread library

实际使用中安装了以下软件:

sudo apt update
sudo apt install build-essential

部署模式

SoftEther 有多种部署方式:

  • ad-hoc VPN:制作一个由装有 SoftEther VPN 的少量计算机组成的临时 VPN。 尽管距离很远,但很容易与任何一种面向局域网的协议进行相互通信。这种模式下,多个装有VPN Client的设备之间可以互相通信。
  • Remote Access to LAN:员工需要从外面或家里连接到公司局域网? Remote Access VPN 实现了从客户端PC 到局域网的虚拟网线,随时随地。与 ad-hoc VPN 相比,除了VPN Client能够之间可以互相访问之外,还可以与VPN Server所在的局域网内的设备通信。
  • LAN to LAN Bridge:默认情况下,地理分布的分支机构被隔离为网络。 SoftEther VPN 在您的所有分支机构之间铺设虚拟以太网电缆。 然后所有分支机构的所有计算机都连接到单个 LAN。

SoftEther 组件

为了支持上述工作模式,SoftEther 提供了三个主要组件:

  • VPN Client:SoftEther VPN Client 是 VPN 客户端软件,它可以虚拟一个或多个网络适配器,用于连接到 SoftEther VPN 服务器的虚拟集线器。 安装VPN Client的设备就可以通过虚拟网络适配器与连接到相同的虚拟集线器的设备和(桥接)网络通信。
  • VPN Bridge:SoftEther VPN Bridge 可以将一个本地网络连接到VPN网络,作为客户端(但不虚拟网络适配器)级联连接到在远程位置运行的 SoftEther VPN Server 的虚拟集线器,在本地可以将VPN网络与一个物理网络适配器进行 2 层桥接连接。
  • VPN Server:SoftEther VPN 服务器是 SoftEther VPN 系统最重要的软件。 顾名思义,SoftEther VPN 服务器扮演 VPN 服务器的角色,通过网络接受来自远程 VPN 客户端和 VPN 网桥的连接。服务器功能是VPN Server的功能之一,另外一个主要功能就是VPN Bridge的功能,VPN Server和VPN Bridge之间不兼容,不能同时安装。

SoftEther的各个组件是单独打包发布的,使用时根据需要,单独下载安装即可。

功能模块

从前面的组件来看,主要是三大功能模块:VPN服务器,VPN客户端,VPN Bridge;

VPN服务器

提供VPN服务器功能,接受客户端和Bridge的连接。接口协议方面,支持多种VPN通信协议;内部功能则由Virtual Hub,Virtual L3 Switch,SecureNAT等模块实现,基本上就是物理网络的模拟。

  • Virtual Hub:实现Hub或二层交换机功能,VPN客户端或Bridge连接到Virtual Hub,就仿佛一根网线连接到了一个交换机。
  • Virtual L3 Switch:实现三层交换机或者说路由器的功能,它的作用是实现不同Virtual Hub直接的数据路由。不同Virtual Hub之间不能直接交换数据,必须由Virtual L3 Switch路由转发。
  • SecureNAT:它模拟的是一般家庭宽带的路由器功能,客户端设备就如同家庭网络中的设备,通过VPN连接到服务器就如果家庭设备接入路由器,SecureNAT实现了路由器的三大主要功能:DHCP为设备分配地址,SecureNAT为客户端的虚拟适配器分配地址;网关和NAT使局域网中的设备可以访问公网,SecureNAT试客户端可访问VPN Server服务器所在的物理网络,这种方式下可以不用建立Bridge,外部设备不直接连接到VPN Server所在的内部网络,NAT的缺点也同样存在,内部网络无法访问VPN Client设备上的网络服务;DNS代理,客户端仅需要将DNS设置为SecureNAT指定的地址,而无需知道服务器端的真正DNS服务器地址。SecureNAT极大简化了客户端的接入,客户端无需知道服务器的网络细节。

VPN客户端

客户端将设备接入到服务器定义的网络(Virtual Hub),并用一个本地虚拟网络适配器(虚拟网卡)实现本地系统与VPN网络的通信。

VPN Bridge

桥接(Bridge)功能负责在VPN网络和本地网络之间建立网桥,将两个网络连接到一起。VPN Server中也有桥接功能,但不用连接到远程VPN服务器,称之为本地桥接(Local Bridge),而单独的VPN Bridge组件则负责连接到服务器,并将VPN网络与本地网络桥接。

ad-hoc模式部署

Ubuntu 20.04 下 部署 SoftEther vpnserver

下载VPN Server

wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.41-9782-beta/softether-vpnserver-v4.41-9782-beta-2022.11.17-linux-x64-64bit.tar.gz

解压

tar -xvf softether-vpnserver-v4.41-9782-beta-2022.11.17-linux-x64-64bit.tar.gz

安装

cd vpnserver
make

启动服务

./vpnserver start

命令行工具vpncmd
运行./vpncmd,功能选择"1. Management of VPN Server or VPN Bridge",其他直接回车,默认连接本地vpnserver服务,进入到Server端功能,命令行提示符为"VPN Server>"。
输入help命令可以查看所有命令
输入命令 ?可以查看某个命令的用法

基本配置命令:

  • Check:可操作性检查
  • Flush:保存所有配置,一般情况都可以自动保存,不用执行此命令
  • Reboot:重启vpnserver
  • About:查看软件协议
  • ServerInfoGet:查看服务器信息
  • ServerStatusGet:查看服务器状态
  • ServerPasswordSet:修改服务器管理密码,此密码即用于服务器级别的管理,也用于Web;注意:此时直接登录到某个虚拟HUB仍然不需要密码,要限制对虚拟HUB的管理权限,用SetHubPassword命令。不设置密码时,只能从本地管理,不能进行远程管理,但是只要从本地登录,不会检查是否是启动vpnserver的用户,其他用户也可以不用密码获得管理权限,所以还是建议设置密码。
  • SetHubPassword:修改HUB管理密码,选择某个虚拟HUB后,用此命令修改HUB级管理密码。用HUB密码登录后,执行Server级管理命令会提示权限不足。
  • Hub:选择一个hub作为当前管理的hub对象
  • HubCreate/HubDelete/HubList:创建HUB/删除HUB/列出当前所有HUB
  • Offline/Online:虚拟HUB切换到 离线/在线 状态
  • StatusGet:查看当前 HUB 状态
  • RouterAdd/RouterDelete/RouterList:添加/删除/列出 L3交换机(路由器)
  • RouterIfAdd/RouterIfDel/RouterIfList:添加/删除/列出 L3交换机(路由器)端口
  • RouterTableAdd/RouterTableDel/RouterTableList:添加/删除/列出 路由规则
  • RouterStart/RouterStop:启动路由/停止路由
  • BridgeCreate/BridgeDelete/BridgeList:创建桥接/删除桥接/列出当前所有桥接
  • BridgeDeviceList:列出所有可用于桥接的网卡
  • UserCreate/UserDelete/UserList:创建/删除/列出 用户
  • UserGet:获取用户信息
  • UserSet:修改用户信息
  • UserExpiresSet:设置用户过期时间
  • UserPasswordSet:设置用用户名/密码鉴权机制
  • UserAnonymousSet:允许用户匿名连接
  • UserNTLMSet:设置用NT域用户鉴权机制
  • UserRadiusSet:设置用Radius鉴权
  • UserSignedSet:设置用私钥/证书鉴权
  • UserPolicySet/UserPolicyRemove:设置/删除 用户安全策略
  • GroupCreate/GroupDelete/GroupList:创建用户组/删除用户组/列出用户组
  • GroupJoin/GroupUnjoin:向用户组添加用户/从用户组删除用户
  • GroupSet/GroupGet:设置用户组信息/获取用户组信息和包含的用户
  • GroupPolicySet/GroupPolicyRemove:指定用户组安全策略/移除用户组安全策略
  • IPsecEnable:启用或禁用IPsec VPN 协议
  • OpenVpnEnable:启用或禁用OpenVpn VPN 协议
  • SstpEnable:启用或禁用 SSTP VPN协议
  • PolicyList:列出所有安全策略及可配置的值
  • RadiusServerGet/RadiusServerSet/RadiusServerDelete:查看当前HUB的Radius鉴权状态/启用Radius鉴权/禁用Radius鉴权
  • SecureNatEnable/SecureNatDisable:使能/禁止 SecureNAT 功能
  • SecureNatStatusGet:查看 SecureNAT 状态
  • DhcpEnable/DhcpDisable:启用/禁用 SecureNAT 的 DHCP 功能
  • NatEnable/NatDisable:启用/禁用 SecureNAT 的 NAT 功能,如果不想让vpn客户端访问vpn服务器的物理网络,仅用 DHCP 功能分配IP地址,可以开启 SecureNAT 和 DHCP,禁用 NAT
  • ServerCertRegenerate:重新生成证书,如果直接使用安装包中自带的证书,如果有多个VPN Server,证书就会冲突,导致只能访问其中一个服务器,这时需要为其他服务器重新生成证书。
  • ServerCertSet/ServerCertGet/ServerKeyGet:设置证书和私钥/获取证书/获取私钥
  • ServerCipherGet/ServerCipherSet:获取/设置 加密算法

配置文件:vpn_server.config
安装后没有配置文件,第一次运行时会自动生成,可以在自动生成的基础上进行修改,大部分配置可以用命令行工具完成,服务器正常退出会自动保存。

实现ad-hoc模式需要的配置:

  1. 创建HUB:也可以使用预先自动创建的HUB DEFAULT
  2. 为HUB创建用户,必要时也可以创建用户组,可以为每个客户端创建单独的用户,也可以多个客户端共用同一个用户。
  3. 设置各用户的鉴权机制,一般简单起见,使用 用户名/密码 鉴权方式,此时会提示输入用户密码。
  4. 将 用户名/密码 交给客户端进行客户端部署。

有了HUB和用户,也为用户设置了接入鉴权机制,服务器就准备好了。

Ubuntu 20.04 下 部署 SoftEther vpnclient

下载

wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.41-9782-beta/softether-vpnclient-v4.41-9782-beta-2022.11.17-linux-x64-64bit.tar.gz

解压

tar -xvf softether-vpnclient-v4.41-9782-beta-2022.11.17-linux-x64-64bit.tar.gz

安装

cd vpnclient
make

启动

sudo ./vpnclient start

常用命令
客户端的维护操作也是通过vpncmd
运行vpncmd后选择2,进入客户端管理模式
客户端管理有以下常用命令

  • About:显示软件协议
  • VersionGet:获取版本号
  • Check:检查运行环境
  • PasswordGet/PasswordSet:参看管理密码状态/设置管理密码
  • RemoteEnable/RemoteDisable:允许/禁止 远程管理
  • NicCreate/NicDelete/NicList:创建/删除/列出 虚拟网卡
  • AccountCreate/AccountDelete/AccountList:创建/删除/列出 VPN连接
  • AccountUsernameSet:设置VPN连接用户名
  • AccountPasswordSet:设置用户名密码验证和密码
  • AccountAnonymousSet:设置匿名验证
  • AccountConnect/AccountDisconnect:连接/断开 VPN连接
  • AccountExport/AccountImport:导出/导入 VPN连接配置,可以备份和复用,便于客户端部署
  • AccountProxyNone/AccountProxyHttp/AccountProxySocks:代理设置:不使用代理/使用HTTP代理/使用Socks代理
  • AccountRetrySet:VPN连接失败时的重连设置

配置文件:vpn_client.config,程序首次运行时会自动生成。

实现ad-hoc模式需要的配置:

  1. 创建虚拟网卡,用于本地系统与VPN网络通信;如果VPN网络中没有DHCP服务器,还需要为虚拟网卡设置静态IP地址,网关等。
  2. 创建VPN连接
  3. 连接到服务器

Windows 10 下 部署 SoftEther vpnclient

下载:https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.41-9782-beta/softether-vpnclient-v4.41-9782-beta-2022.11.17-windows-x86_x64-intel.exe

实现ad-hoc模式需要的配置:
Windows客户端有图形界面,配置很方便。
第一次运行时检查到没有虚拟网卡会提示创建虚拟网卡
创建虚拟网卡后,添加VPN连接
然后连接到服务器,即可使用
如果VPN网络没有DHCP服务器,也需要为网卡设置静态IP

SecureNAT 功能

  • 为什么要使用SecureNAT功能?
    通常系统管理员不会为客户端分配IP地址,而多个客户端自己设置IP地址又很麻烦,要保持同网段的IP地址设置,保证不与内网IP地址冲突等。并且要让客户端访问内网,还需要设置桥接或路由。SecureNAT可以很方便的解决这些问题,除了内网无法访问VPN客户端上的网络服务。
  • vpnserver 配置:服务端启用SecureNAT功能,默认状态下,DHCP和NAT功能都是启用的,如果只想使用DHCP功能,不想让客户端访问内网,则禁用NAT功能。
  • vpnclient 配置:客户端只需要保持虚拟网卡通过DHCP自动获取网络设置即可

Remote Access to LAN 模式部署

LAN to LAN Bridge模式部署

其他问题

网桥的问题

Remote Access to LAN 和 LAN to LAN Bridge 模式用的比较少,这里就不详细说明了,有需要的可以参考官方文档;

这里要说明的是,这两种模式都借助了VPN与本地网卡的桥接功能,桥接功能有一个弊端,就是无法与运行VPN Server或VPN Bridge的服务器通信,因为报文被直接从网卡发送出去了而无法进入本地操作系统协议栈,包括前面的SecureNAT,都存在同样的问题。所以要想访问VPN Server所在的服务器,就还需要在服务器上安装VPN Client,连接到本地的VPN Server,通过VPN Client的虚拟网卡与服务器通信。

网关地址

SecureNAT和虚拟路由器都会设置地址,这些地址通常作为设备之间通信的网关地址,而这些地址可以ping通,但并不能使用这些地址与VPN Server所在的服务器通信。

服务脚本

SoftEther目前没有提供用于systemd系统的服务启动脚本,需要自己编写。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐