Content Table

OSX Monterey 使用 VPN

在 Monterey 系统中,L2TP/IPSec 的 VPN 能够连接上 VPN 服务器,也能 ping 通内网 IP,但却不能访问网络,据说是苹果修改了 VPN 的加密方式导致的,可参考 VPN (L2TP over IPSec) stopped working after updating to Mac OS BigSur, does anyone have the same problem? 的讨论,在 Configuring L2TP VPN to use with iOS 14 and macOS Big Sur 中似乎给出了解决办法,但是需要修改 VPN 服务器端的配置,具体没有测试过,不知道行不行。

在 Monterey 中使用 L2TP/IPSec 的 VPN 的办法可以使用下面的这些方式:

  • 尝试使用上面的解决办法:
    • 需要修改 VPN 服务器 (不知道对其他系统的 VPN 客户端有无影响,且需要管理员去处理)
    • 没测试过,不一定能行
  • 服务器端开通 OpenVPN,Monterey 中使用 OpenVPN 进行连接
    • 需要修改 VPN 服务器
    • 需要公网 IP
  • 安装虚拟机 + Windows,在其中使用 VPN
    • 费钱 (虚拟机要钱,Windows 系统要钱)
    • 消耗系统资源
  • 购买一个便宜的 Windows Server 云主机 (3 年 200 块的),在其中使用 VPN
    • 费钱,但可以不多
    • 有点技术难度
  • 有 iPhone 的话可使用 iPhone 的 USB 网络共享
    • iPhone 开启 USB 网络共享
    • iPhone 连上无线
    • Mac 关闭无线
    • Mac 与 iPhone 用 USB 数据线连接起来
    • Mac 登录 L2TP 的 VPN

现在不少云服务器商提供了很多便宜的云主机活动,例如良心云目前的 2 核 4G 8M 网络的云主机 3 年才 222 块,于是买了一个安装 Windows Server 2016,下面介绍在 Windows Server 里面使用 VPN 遇到的问题解决办法 (定位到路由问题花了好几天)。

由于我的 Mac 是 ARM 的,有时候需要编译 X86 的程序,也正好用上。

连接 VPN

使用 Windows Server 2016 系统内置的 VPN 客户端,填写相关信息即可,然后点击连接。

例如填写:

1
2
3
4
5
Server Address: 111.108.30.232
Account Name: huangbiao
Password: ****
Shared Secret: ****
DNS: 223.5.5.5, 223.6.6.6

连接 VPN 的时候报错,需要调整客户端注册表

错误如图:

需要调整客户端注册表:

1
2
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\RasMan\Parameters /v ProhibitIpSec /t REG_DWORD /d 0x1 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\Rasman\Parameters /v AllowL2TPWeakCrypto /t REG_DWORD /d 0x1 /f

参考 腾讯云上 VPN 客户端注意事项【问题二】连 VPN 的时候报错,需要调整客户端注册表

VPN 连上了,但是上不了外网了

参考 挂了 VPN 软件后本地网络变成受限,把 VPN 连接的 IPv4 属性中 > 高级 > 在远程网络上使用默认网关前面的勾取消。

VPN 连上了,但 VPN 网段不能访问

一般云主机的 Windows Server 中,不论你机器的 VPC 网段是啥,永久路由似乎是固定的,我们需要把 VPN 内网的 IP 添加到系统的路由中 (例如要使用 VPN 访问的内网 IP 192.168.1.73,其网段为 192.168.1.0):

  1. 在 VPN 连接的属性里找到 VPN Server 的 IP 如 192.168.3.10 (网关)
  2. 删除路由信息: route delete 192.168.1.0 (如果有)
  3. 添加路由信息: route -p add 192.168.1.0 mask 255.255.255.0 192.168.3.10
    所有发往 192.168.1.0/24 地址段的 IP 数据包,全部由网关 192.168.3.10 转发。

提示:

使用 ssh 通过 VPN 访问公司内网

通过上面的步骤,VPN 生效后,Mac 可以使用 RDP (Microsoft Remote Desktop) 远程登录 Windows,然后再 Windows 的命令行使用 ssh 访问公司内网。

如果都是终端里的操作,可以在 Windows 上运行 ssh 服务器,Mac 本地 ssh 连上 Windows 的 ssh 服务器,然后再继续 ssh 连到公司内网 (此时会使用 VPN 网络进行连接),就能够在 Mac 终端里访问公司内网了,这种方式操作会更方便且更快速 (减少了图形界面的网络传输开销):

  1. RDP 登录 Windows
  2. 安装 git,为了使用其 ssh 和 sshd,并且把 git 下的 usr/bin 目录配置到系统的环境变量 PATH 里
  3. 管理员身份运行 Powershell
  4. 生成秘钥: ssh-keygen -A,否则 sshd 启动时会报 no hostkeys available
  5. 启动 ssh 服务器: sshd
  6. 执行 tasklist | find "sshd" 查看 sshd.exe 是否存在,存在则表明 sshd 启动成功
  7. 在 Mac 的终端执行 ssh Administrator@<Win_IP>,输入管理员的密码进行连接 (每一个 ssh 连接都会启动一个 sshd 进程)

使用 ssh 隧道访问公司内网

使用 RDP 远程登录 Windows Server,在里面可以使用浏览器访问公司内网的网页,但是稍显麻烦。通过上面的步骤我们已经能够本地使用 ssh 访问公司内网,可以再进一步,使用 ssh 隧道的本地端口转发功能,在本地浏览器里就能访问公司内网的网页了(数据库等同理),就不必先用 RDP 远程登录 Windows Server 桌面了。

本地端口转发的命令语法:

1
ssh -L LOCAL_PORT:DESTINATION_IP:DESTINATION_PORT [USER@]SSH_SERVER

使用的选项如下:

  • LOCAL_PORT: 本地计算机的IP和端口号。如果监听的是回环地址127.0.01 LOCAL_IP可省略。
  • DESTINATION_IP:DESTINATION_PORT: 目标机器的IP或主机名和端口。
  • [USER@]SERVER_IP: 远程SSH用户和服务器IP地址。

假设您有一个 Web 服务器在内部网络上的计算机 web001.host 上运行,并且可从计算机 win_server.host 访问的到 web001.host 计算机端口 8960 上,并且您想使用本地计算机浏览器访问 web001.host:8960 的网页,您可以使用以下命令转发连接:

1
ssh -L 28960:web001.host:8960 Administrator@win_server.host

运行命令后,系统会提示您输入远程 ssh 用户密码。输入后,您将与远程服务器建立 ssh 隧道,然后浏览器里输入 http://127.0.0.1:8960 就能访问公司内网的 http://web001.host:8960 网页了。

想进一步了解 ssh 隧道的端口转发,详情请访问 如何配置 ssh 隧道以及端口转发