使用 SoftEther VPN 搭建私有局域网
Preface
Linux 下并不是所有软件都能设置代理,于是我想起了很久以前用过但没用明白的 SoftEther VPN。
本文将描述 SoftEther VPN(以下简称 sevpn) 在 Linux 服务器和客户端的搭建过程。
准备工作
- 到 softether.org 下载 Windows 和 Linux 的 client 和 server,共2个exe和2个tgz包
- Wine 或运行 Windows 的虚拟机,用来运行 sevpn 的图形界面
- GCC 用来编译 Linux 版的 sevpn
sevpn 的编译和安装
编译 Linux 版的可执行文件
前面准备工作里下载的 linux 版 sevpn 只包含源码,需要调用 .install.sh
来编译成可执行文件。
编译完成后,一共有3个文件,{vpnserver
或 vpnclient
, vpncmd
, hamcore.se2
} 是运行 sevpn 的必备文件。
安装管理工具
注: 该工具可以用 Wine 安装和运行。
安装很简单,在 “Select Software Components to Install” 界面选择 “Admin Tools Only” 那一项即可。
搭建 sevpn 服务器
启动 vpnserver
- 在服务器上运行
sudo vpnserver start
- 打开 SEVPN Server Manager(也就是 GUI 版的管理工具)
- 点击 “New Setting”,在弹出的窗口中设置如下信息
Server Name: 显示在管理工具主界面的服务器名称
Host Name: 服务器的IP地址或域名
Port Number: 端口号
然后点击 OK - 回到主界面后,列表里会多出一项,双击它,会要求设置新密码,请设置一个复杂的密码
- 设置完密码后点OK,然后会提示密码设置成功,点击OK
搭建 Virtual Hub
- 弹出 SEVPN Easy Setup,关掉它即可
- 然后会弹出 “Do you want to seup the IPSec?",点 No 即可
- 删掉列表里名为 “DEFAULT” 的 HUB
- 点击 “Create New Hub”,给 Hub 起个名字,以后会用到这个名字。
然后设置该 Hub 的密码,请务必设置一个复杂的密码。
然后勾选 “No Enumerate to Anonymous Users”,勾选此项后,客户端想要连接服务器,必须手动填写 Hub 的名称。
然后点击 OK。 - 选中列表中刚创建的 Hub,点击 “Manage Virtual Hub”
- 然后点击 “Manage User”,添加一个用户,这个用户用来登录到该 VPN 服务器
- 然后回到管理 Hub 的界面(“Management of Virtual Hub”)
- 点击 “Virtual NAT and Virtual DHCP Server (SecureNAT)",然后点击 “Enable SecureNAT”,然后点击 “Yes”。
SecureNAT 是用来在服务器上可以自动为客户端分配一个 IP 地址。 - 然后按数次 Exit 后回到 Manage VPN Server 界面
- 点击 “Encryption and Network”,考虑更换 “Encryption Algorithm”
- 取消勾选 “Use Keep Alive Internet Connection”
- 可选: 点击 “VPN over ICMP / DNS Settings”,勾选那两个复选框
- 点击数次 OK 回到 “Manage VPN Server”
端口设置
在 Management of Listeners 列表里删除不需要的端口监听,并按需求添加需要的端口。
如果服务器有防火墙,则需要添加规则以放行指定端口的数据包。
至此,服务器端已经搭建完成。
使用客户端连接服务器
启动 vpnclient
- 运行
sudo vpnclient start
- 启动 SEVPN Client Manager,分2种情况
- 使用 Wine 运行 SEVPN Client Manager 的话,直接运行它即可
- 在 Windows 虚拟机内运行的话,找到
vpncmgr.exe
,使用命令行运行vpncmgr.exe /remote
,然后填写宿主机的IP地址。连接不上的话,请检查防火墙设定。
创建虚拟网卡
菜单栏 -> Virtual Adapter -> New Virtual Network Adapter,然后按照说明创建一个虚拟网卡即可。假定新建的虚拟网卡名称为 vpn_0
创建 VPN 连接
- 运行命令,允许本机直接发送数据包到服务器
ip route add <server_ip> via <gateway> dev <interface>
server_ip: VPN 服务器的 IP
gateway: 当前所在网络内的默认 gateway
interface: 通过哪个网络设备发送数据包 - 菜单栏 -> Connect -> New VPN Connection Setting
Server Name: 该 VPN 连接的名称
Host Name: VPN 服务器的IP地址或域名
Port Number: VPN 服务器的端口号
Virtual Hub Name: 填写前面创建的 Virtual Hub 的名字
Virtual Network Adapter to Use: 选择刚才创建的虚拟网卡
User Authenication Setting: 填写前面创建 Hub 后,在 Hub 里创建的用户名和密码
点击 OK - 右键刚刚新建的连接 -> Connect
- 运行命令
dhclient vpn_0
,该命令将让虚拟网卡获得一个 IP 地址
断开 VPN 连接
- 在 VPN 连接上右键 -> Disconnect
- 删除虚拟网卡,这样就会在路由表里自动删除虚拟网卡的路由
- 文件
/etc/resolv.conf
会在连接 VPN 后被修改成 VPN 内的网关,断开 VPN 后需要改回原来的 nameserver