🔐 Softether VPN 搭建及使用
在一些诸如公司、学校实验室、部分家用网络等内网环境下,部分服务器、NAS、Emby等由于没有公网 IP 导致离开内网环境下无法访问,此时需要搭建 VPN、端口转发等方式来实现内网外访问。考虑到一些 frp 等端口转发工具不关注用户权限、zerotier 及 n2n 等又不能细粒度的控制用户请求,这里选用功能较为全面的 Softether VPN。
如果只是个人使用,仅想访问内网对应服务且不需要权限管理等额外功能,那么推荐使用 frp、zerotier 等工具,配置简易,使用简单,容易上手。
准备
一台具备公网 IP 的服务器:Softether 服务端需要能被所有客户端访问到
- CPU、RAM 配置无需太高
- 网络环境要好,和 VPN 的使用体验直接挂钩
Softether 服务端
安装
- 现有很多较为完善的教程,直接参考即可。例如:https://www.mivm.cn/softether-vpn-lan/
- 官方有图形客户端,无需全程命令行
重点功能
- VPN 流量等权限管控:通过为不同用户建立不同用户组,并限制不同用户组使用 VPN 的上行、下行等实现权限控制
- 用户行为监控:有丰富的日志功能记录流量使用情况,并可以记录每个用户具体的数据量、活动连接、来源 IP 等等
- 安全:支持多账号,支持白名单、黑名单等
Softether 客户端连接
通用方法
使用系统自带 VPN 功能,选择 L2TP/IPsec
类型:
不推荐 Windows 使用此方法
- Windows:系统设置 -> 网络和 Internet -> VPN -> 添加 VPN
- Linux:系统设置 -> 网络 -> VPN
- MacOS:系统设置 -> 网络 -> 新建 -> VPN
- 移动设备:系统设置 -> 搜索 VPN
Windows
推荐直接使用官方提供的图形客户端
使用通用方法之后,如果发现无法正常上网,需要: 控制面板 -> 网络和 Internet -> 网络连接 里找到刚刚的网络适配器,双击,然后选择 属性 -> 网络 -> TCP/IPv4 -> 高级 -> 取消勾选“在远程网络上使用默认网关”
Linux
命令行
连接
- 官网下载 Linux 客户端(似乎只有源码包)
- 解压后,进入 ./vpnclient 目录,执行
make
,确保执行完成后,生成vpnclient
及vpncmd
两个可执行文件 - 启动 vpn 服务:
sudo ./vpnclient start
,强烈建议直接使用 root 权限执行 - 配置 vpn:
./vpncmd
- 依次选择 client -> localhost
help
可查看所有命令列表AccountCreate
创建新连接,参数和附件指南中一致即可,注意这一步需要输入虚拟网卡名称,没有的话一般会自动创建,如果没有自动创建,那么执行NicXXXXX
命令手动创建一个网卡AccountPasswordSet
设置连接的密码AccountConnect
连接即可
- 配置 IP 地址
- 4.3 中创建的虚拟网卡名加上
vpn_
前缀才是真正的虚拟网卡名称 sudo ifconfig 虚拟网卡名 10.1.1.XXX netmask 255.0.0.0
<- 注意修改 IP 地址sudo dhclient 虚拟网卡名
<- 可能要执行几十秒甚至一分钟,等着就好
- 4.3 中创建的虚拟网卡名加上
自启动
注意修改自启脚本里的连接名:CONNECTION、虚拟网卡名 及 固定 IP 地址!
- 新建
/etc/init.d/vpnclient
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#!/bin/sh # Start/stop the vpnclien daemon # ### BEGIN INIT INFO # Provides: vpnclient # Required-Start: $local_fs $syslog $time # Required-Stop: $local_fs $syslog $time # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: vpn client service # Description: Softether vpn client service. ### END INIT INFO EXE_DIR=/opt/vpnclient/ SER="$EXE_DIR"vpnclient CMD="$EXE_DIR"vpncmd start() { echo start $SER start $CMD localhost /client /cmd accountconnect CONNECTION # <======= 连接名 ifconfig vpn_xxx 10.1.1.XXX netmask 255.0.0.0 # <=============== 注意修改 IP 地址和虚拟网卡名称 echo end } stop() { $SER stop } case "$1" in start) start ;; stop) stop ;; esac exit 0
sudo chmod 755 /etc/init.d/vpnclient
sudo systemctl daemon-reload
sudo systemctl enable vpnclient.service
sudo systemctl start vpnclient.service
GUI
参考“通用方法”。
固定 IP 设置
- Windows:在网络适配器中修改 IP4 地址
- Linux:命令行修改对应适配器的 IP4 地址
- MacOS:vpn 高级设置中直接指定 IP4 地址
本文由作者按照 CC BY 4.0 进行授权