# 10分钟教你用 Google Cloud Platform 搭建自己的VPN

本教程以 Google Cloud Platform 为例进演示

# 准备

  • 能够访问谷歌站点
  • Google 账号
  • VISA 双币信用卡

# 申请并创建VM实例

# 1. 登陆 Google Cloud (opens new window) 点击免费使用,填写相关资料

image-20251011180014594 image-20251011180430526image-20251011180521452

# 2. 创建实例

导航菜单 → Compute Engine → VM实例image-20251011180827903

# 2.1 设置机器配置

填写实例 名称 选择 区域地区(日本站点距离近,响应速度快) 内核内存 选择最低配置(如还需其他服务可自行定义调整配置,)

image-20251011181555158

# 2.2 设置操作系统和存储空间

按需选择操作系统和磁盘空间即可, 我这里选的是CentOS系统,版本10 硬盘空间20GB

image-20251011181927514

# 2.3 设置网络

勾选 允许 HTTP 流量 允许 HTTPS 流量

image-20251011182342728

确认配置和费用符合心理预期,点击创建即可

# 3. 创建防火墙规则

导航菜单 → VPC网络 → 防火墙

image-20251011182820166

# 3.1 自定义规则配置

image-20251011200245161

image-20251011200412282

名称: 按规则自定义 目标: 网络中的所有实例 来源过滤条件:IPv4 来源IPv4范围: 0.0.0.0/0 协议和端口: 勾选 UDP 填写 500,4500,勾选 其他协议: 填写 esp

点击 创建

# 3.2 定义好的防火墙规则

image-20251011200739933

# 4. 创建VPC网络

导航菜单 → VPC 网络

image-20251011200908953

# 4.3 修改default配置

勾选 自动全球 选项框 点击 保存

image-20251011201017679

# 5. 登陆服务器

导航菜单 → Compute Engine → 虚拟机实例 → 点击 SSH

image-20251011201419625

# 5.1 浏览器窗口登录

image-20251011201746561

image-20251011201557589

# 5.2 终端工具Tabby登录

# 5.2.1 准备 SSH 密钥

确保您在本地计算机上有一个 SSH 密钥对(通常是 id_rsa 和 id_rsa.pub)。

本次示例自定义来了名称my-gcp-key

如果没有密钥对,可以通过以下命令生成:

# 生成密钥对
ssh-keygen -t rsa -b 2048 -f ~/.ssh/my-gcp-key

image-20251011202400897

# 5.2.2 拷贝密钥对
#显示公钥文件内容
cat my-gcp-key.pub

image-20251011202618057

# 5.2.3 在Google Cloud中设置 SSH 密钥

在搜索框中输入 SSH Keys,跳转到对应的产品页面

image-20251011202856634

将刚刚拷贝好的my-gcp-key.pub文件内容,放到SSH密钥中。

image-20251011203800093

# 5.2.4 在终端工具Tabby中填写连接信息

主机: 输入 Google Cloud 实例的外部 IP 地址。 端口: 默认情况下是 22。 用户名: 输入 SSH 用户名(就是SSH密钥中的用户名)。 身份验证方法: 选择 “密钥”。 私钥: 选择您的私钥文件(如 ~/.ssh/my-gcp-key)。

image-20251011203403280

登录后的界面

image-20251011203942660

# 部署VPN服务

# 1. 下载脚本

# 更新yum包管理器
sudo yum update

# 使用 `yum` 包管理器安装 `wget`
sudo yum install wget

# 确认安装成功,可以执行以下命令检查 `wget` 版本
wget --version

# 使用 `wget` 从 `https://git.io/vpnsetup` 下载 VPN 设置脚本,并保存为 `vpnsetup.sh`
wget https://git.io/vpnsetup -O vpnsetup.sh

image-20251011204630576

# 2. 运行脚本

#运行脚本并传递变量:
 sudo VPN_IPSEC_PSK='预分享密钥' \
 VPN_USER='用户名' \
 VPN_PASSWORD='密码' \
 sh vpnsetup.sh

五分钟后…

image-20251011211438419

看到如上界面表示已经成功部署VPN服务,请将框内连接信息妥善保存

# 3. 管理 VPN 用户(IPsec PSK)

#下载更新脚本(可以用于更新和新增用户)
wget https://get.vpnsetup.net/updateusers -O updateusers.sh

#增加用户
sudo addvpnuser.sh '要添加的用户名' '密码'

# 或者更新用户
sudo addvpnuser.sh '要更新的用户名' '新密码'

# 查看用户信息文件 /etc/ppp/chap-secrets
sudo cat /etc/ppp/chap-secrets

# 查看IPsec PSK(预共享密钥)/etc/ipsec.secrets文件信息 
sudo cat /etc/ipsec.secrets

详细部署VPN服务教程请移步至Github (opens new window)

# 客户端连接

# 1. OS X (macOS)

macOS 13 (Ventura) 及以上

你也可以使用 IKEv2 (opens new window)(推荐)或者 IPsec/L2TP (opens new window) 模式连接。

  1. 打开系统设置并转到网络部分。
  2. 在窗口右方单击 VPN
  3. 添加VPN配置 下拉菜单选择 Cisco IPSec
  4. 在打开的窗口中的 显示名称 字段中输入任意内容。
  5. 服务器地址 字段中输入你的 VPN 服务器 IP
  6. 帐户名称 字段中输入你的 VPN 用户名
  7. 密码 字段中输入你的 VPN 密码
  8. 类型 下拉菜单选择 共享密钥
  9. 共享密钥 字段中输入你的 VPN IPsec PSK
  10. 保持 群组名称 字段空白。
  11. 单击 创建 保存 VPN 连接信息。
  12. 如果要在菜单栏显示 VPN 状态并快速访问相关设置,你可以转到系统设置的控制中心部分,滚动到页面底部并在 VPN 下拉菜单选择 在菜单栏中显示

要连接到 VPN:使用菜单栏中的图标,或者打开系统设置的 VPN 部分并启用 VPN 连接。最后你可以到 这里 (opens new window) 检测你的 IP 地址,应该显示为你的 VPN 服务器 IP

image-20251011222525943

如果在连接过程中遇到错误,请参见 故障排除 (opens new window)

# 1.1 详细的客户端连接方式

IPsec/XAuth VPN 客户端连接方式 (opens new window)(推荐) IPsec/L2TP VPN 客户端连接方式 (opens new window) IKEv2连接方式 (opens new window)

第一台设备连接成功后,为了保证后续设备能够正常使用VPN,建议优先阅读注意事项


# 2. 如何管理VPN用户

在默认情况下,搭建好VPN服务后,将只创建一个用于 VPN 登录的用户账户。如果你需要添加,更改或者删除用户,请阅读此链接 (opens new window)


# 3. 可能用到的命令

  • 重启服务

    sudo service ipsec restart && sudo service xl2tpd restart
    
  • 查看连接客户端

    sudo ipsec whack --trafficstatus
    
  • 查看连接日志

    tail -F /var/log/auth.log | grep pluto
    
  • 查看服务状态

    sudo ipsec status
    sudo ipsec verify
    

# 4. 注意事项

本注意事项为我在使用过程当中从所遇到的问题当中整理得来,目前还未找到解决办法

  • 多台(2台及以上)设备不能通过同一路由器进行VPN连接,一个路由器只能路由一台设备连接VPN
  • 同一账号可在多台设备上使用,但不能同时使用同一账号进行VPN连接

# 5. 遇到问题了

使用过程中出现任何问题都建议优先查看此链接 (opens new window),该VPN作者对使用者使用过程当中所产生的问题都做出了解答,如果问题仍然没有解决,不要犹豫,删掉所有实例及配置再次开始吧!

#下载卸载的脚本
wget https://get.vpnsetup.net/unst -O unst.sh && sudo bash unst.sh