使用 Linux 脚本一键快速搭建自己的 IPsec VPN 服务器。支持 IPsec/L2TP, Cisco IPsec 和 IKEv2 协议。

IPsec VPN 可以加密你的网络流量,以防止在通过因特网传送时,你和 VPN 服务器之间的任何人对你的数据的未经授权的访问。在使用不安全的网络时,这是特别有用的,例如在咖啡厅,机场或旅馆房间。

我们将使用 Libreswan 作为 IPsec 服务器,以及 xl2tpd 作为 L2TP 提供者。

快速开始

首先,在你的 Linux 服务器* 上安装 Ubuntu, Debian, CentOS/RHEL, Rocky Linux, AlmaLinux, Amazon Linux 2 或者 Alpine Linux

使用以下命令快速搭建 IPsec VPN 服务器:

  • 脚本安装

搭建方式1:

1
wget https://get.vpnsetup.net -O vpn.sh && sudo sh vpn.sh

搭建方式2:

你也可以使用 curl 下载再执行(如果上面的连接无法下载的h话):

1
curl -fsSL https://get.vpnsetup.net -o vpn.sh && sudo sh vpn.sh

你的 VPN 登录凭证将会被自动随机生成,并在安装完成后显示在屏幕上。

如果想自己提供VPN 登录凭证

1
2
3
4
wget https://get.vpnsetup.net -O vpn.sh
nano -w vpn.sh
[替换为你自己的值: YOUR_IPSEC_PSK, YOUR_USERNAME 和 YOUR_PASSWORD]
sudo sh vpn.sh

* 注:

  1. 一个安全的 IPsec PSK 应该至少包含 20 个随机字符。

  2. 在安装时用的用户的home目录下可以获取到相关证书文件,如下图所示。

  • docker镜像安装
1
2
3
4
5
6
7
8
9
10
docker run \
--name ipsec-vpn-server \
--env-file ./vpn.env \
--restart=always \
-v /root/vpn/ikev2-vpn-data:/etc/ipsec.d \
-v /lib/modules:/lib/modules:ro \
-p 500:500/udp \
-p 4500:4500/udp \
-d --privileged \
hwdsl2/ipsec-vpn-server

* 注:

【/root/vpn/ikev2-vpn-data】为宿主的映射路径,以便获取相关的证书文件。

【/etc/ipsec.d】为容器内部的路径。

【./vpn.env】为执行命令的当前目录下的一个文件,

文件内容如下:

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
# Note: All the variables to this image are optional.
# See README for more information.
# To use, uncomment and replace with your own values.

# Define IPsec PSK, VPN username and password
# - DO NOT put "" or '' around values, or add space around =
# - DO NOT use these special characters within values: \ " '
VPN_IPSEC_PSK=ipsec.com
VPN_USER=vpnuser
VPN_PASSWORD=yourpassword

# Define additional VPN users
# - DO NOT put "" or '' around values, or add space around =
# - DO NOT use these special characters within values: \ " '
# - Usernames and passwords must be separated by spaces
# VPN_ADDL_USERS=additional_username_1 additional_username_2
# VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2

# Use a DNS name for the VPN server
# - The DNS name must be a fully qualified domain name (FQDN)
# VPN_DNS_NAME=vpn.example.com
VPN_PUBLIC_IP=xxx.xxx.xxx.xxx
# Specify a name for the first IKEv2 client
# - Use one word only, no special characters except '-' and '_'
# - The default is 'vpnclient' if not specified
# VPN_CLIENT_NAME=vpnclient

# Use alternative DNS servers
# - By default, clients are set to use Google Public DNS
# - Example below shows Cloudflare's DNS service
VPN_DNS_SRV1=8.8.8.8
VPN_DNS_SRV2=8.8.4.4

# Protect IKEv2 client config files using a password
# - By default, no password is required when importing IKEv2 client configuration
# - Uncomment if you want to protect these files using a random password
VPN_PROTECT_CONFIG=yes

用户管理

  • 查看或更改 IPsec PSK:

IPsec PSK(预共享密钥)保存在文件 /etc/ipsec.secrets。所有的 VPN 用户将共享同一个 IPsec PSK。
查看文件内容

1
cat /etc/ipsec.secrets

该文件的格式如下:

1
%any  %any  : PSK "你的IPsec预共享密钥"
  • 服务器启停

如果要更换一个新的 PSK,可以编辑此文件。不要在值中使用这些字符:\ “ ‘

更换完成后重启服务:

1
2
3
service ipsec restart

service xl2tpd restart
  • 查看 VPN 用户:
    1
    2
    cat /etc/ppp/chap-secrets  #查看vpn用户
    cat /etc/ipsec.d/passwd # 这个文件中的密码以加盐哈希值的形式保存。该步骤可以借助比如 openssl 工具来完成:
    注: 以下命令的输出为:密码1的加盐哈希值

将你的密码用 ‘单引号’ 括起来

1
openssl passwd -1 '密码1'
  • 更新用户信息:
1
2
wget -nv -O add_vpn_user.sh https://bit.ly/addvpnuser
sudo bash add_vpn_user.sh '要添加的用户名' '密码'

或者更新用户:

1
sudo bash add_vpn_user.sh '要更新的用户名' '新密码'
  • 删除一个 VPN 用户

下载脚本

1
wget -nv -O del_vpn_user.sh https://bit.ly/delvpnuser#  运行脚本并按提示操作

删除用户:

1
sudo bash del_vpn_user.sh '要删除的用户名'

配置 IKEv2 VPN 客户端

  • Windows 7, 8, 10 和 11 屏幕录屏操作详解

    1. 将生成的 .p12 文件安全地传送到你的计算机。
    2. 右键单击 ikev2_config_import.cmd 并保存这个辅助脚本到与 .p12 文件放在 相同的文件夹。
    3. 右键单击保存的脚本,选择 属性。单击对话框下方的 解除锁定,然后单击 确定。
    4. 右键单击保存的脚本,选择 以管理员身份运行 并按提示操作。
    5. 要连接到 VPN:单击系统托盘中的无线/网络图标,选择新的 VPN 连接,然后单击 连接。验证一下是否成功连上。
  • OS X (macOS)

    1. 首先,将生成的 .mobileconfig 文件安全地传送到你的 Mac,然后双击并按提示操作,以导入为 macOS 配置描述文件。如果你的 Mac 运行 macOS Big Sur 或更新版本,打开系统偏好设置并转到描述文件部分以完成导入。在完成之后,检查并确保 “IKEv2 VPN” 显示在系统偏好设置 -> 描述文件中。
    2. 连接到 VPN
      • 打开系统偏好设置并转到网络部分。
      • 选择与 你的 VPN 服务器 IP(或者域名)对应的 VPN 连接。
      • 选中 在菜单栏中显示 VPN 状态 复选框。
      • 单击 连接。
      • (可选功能)启用 VPN On Demand(按需连接) 以在你的 Mac 连接到 Wi-Fi 时自动启动 VPN 连接。要启用它,选中 VPN 连接的 按需连接 复选框,然后单击 应用。你可以自定义按需连接规则,以排除某些 Wi-Fi 网络(例如你的家庭网络)。
  • iOS (iPhone/iPad)

    1. 首先,将生成的 .mobileconfig 文件安全地传送到你的 iOS 设备,并且导入为 iOS 配置描述文件。要传送文件,你可以使用:
      • AirDrop(隔空投送),或者
      • 使用 文件共享 功能上传到设备(任何 App 目录),然后打开 iOS 设备上的 “文件” App,将上传的文件移动到 “On My iPhone” 目录下。然后单击它并到 “设置” App 中导入,或者
      • 将文件放在一个你的安全的托管网站上,然后在 Mobile Safari 中下载并导入它们。
    2. 在完成之后,检查并确保 “IKEv2 VPN” 显示在设置 -> 通用 -> VPN 与设备管理(或者描述文件)中。连接到 VPN:
      • 进入设置 -> VPN。选择与 你的 VPN 服务器 IP(或者域名)对应的 VPN 连接。
      • 启用 VPN 连接。连接成功后,验证是否连接成功。
    3. (可选功能)启用 VPN On Demand(按需连接) 以在你的 iOS 设备连接到 Wi-Fi 时自动启动 VPN 连接。要启用它,单击 VPN 连接右边的 “i” 图标,然后启用 按需连接。你可以自定义按需连接规则,以排除某些 Wi-Fi 网络(例如你的家庭网络),或者在 Wi-Fi 和蜂窝网络上都启动 VPN 连接。
  • Android

    1. 将生成的 .sswan 文件安全地传送到你的 Android 设备。
    2. Google PlayF-DroidstrongSwan 下载网站下载并安装 strongSwan VPN 客户端。
    3. 启动 strongSwan VPN 客户端。
    4. 单击右上角的 “更多选项” 菜单,然后单击 导入VPN配置。
    5. 选择你从服务器传送过来的 .sswan 文件。
      1. 要查找 .sswan 文件,单击左上角的抽拉式菜单,然后浏览到你保存文件的目录。
    6. 在 “导入VPN配置” 屏幕上,单击 从VPN配置导入证书,并按提示操作。
    7. 在 “选择证书” 屏幕上,选择新的客户端证书并单击 选择。
    8. 单击 导入。
    9. 单击新的 VPN 配置文件以开始连接。连接成功后,验证是否连接成功。
  • Chrome OS (Chromebook)

    1. 首先,在 VPN 服务器上导出 CA 证书到 ca.cer:
      1
      sudo certutil -L -d sql:/etc/ipsec.d -n "IKEv2 VPN CA" -a -o ca.cer
    2. 将生成的 .p12 文件和 ca.cer 文件安全地传送到你的 Chrome OS 设备。
    3. 安装用户证书和 CA 证书:
      1. 在 Google Chrome 中打开新标签页。
      2. 在地址栏中输入 chrome://settings/certificates
      3. (重要) 单击 导入并绑定 而不是 导入。
      4. 在对话框中选择你从服务器传送过来的 .p12 文件并选择 打开。
      5. 如果证书没有密码,单击 确定。否则输入该证书的密码。
      6. 单击上面的 授权机构 选项卡,然后单击 导入。
      7. 在对话框中左下角的下拉菜单选择 所有文件。
      8. 选择你从服务器传送过来的 ca.cer 文件并选择 打开。
      9. 保持默认选项并单击 确定。
    4. 添加 VPN 连接:
      1. 进入设置 -> 网络。
      2. 单击 添加连接,然后单击 添加内置 VPN。
      3. 在 服务名称 字段中输入任意内容。
      4. 在 提供商类型 下拉菜单选择 IPsec (IKEv2)。
      5. 在 服务器主机名 字段中输入 你的 VPN 服务器 IP(或者域名)。
      6. 在 身份验证类型 下拉菜单选择 用户证书。
      7. 在 服务器 CA 证书 下拉菜单选择 IKEv2 VPN CA [IKEv2 VPN CA]。
      8. 在 用户证书 下拉菜单选择 IKEv2 VPN CA [客户端名称]。
      9. 保持其他字段空白。
      10. 启用 保存身份信息和密码。
      11. 单击 连接。连接成功后,网络状态图标上会出现 VPN 指示。
      12. (可选功能)你可以选择启用 Chrome OS 上的 “始终开启的 VPN” 功能。要管理该设置,进入设置 -> 网络,然后单击 VPN。
  • Linux

    1. 在配置 Linux 客户端之前,你必须更改 VPN 服务器上的以下设置:编辑服务器上的 /etc/ipsec.d/ikev2.conf。在 conn ikev2-cp 小节的末尾添加 authby=rsa-sha1,开头必须空两格。保存文件并运行 service ipsec restart。
    2. 要配置你的 Linux 计算机以作为客户端连接到 IKEv2,首先安装 NetworkManager 的 strongSwan 插件:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      # Ubuntu and Debian
      sudo apt-get update
      sudo apt-get install network-manager-strongswan

      # Arch Linux
      sudo pacman -Syu # 升级所有软件包
      sudo pacman -S networkmanager-strongswan

      # Fedora
      sudo yum install NetworkManager-strongswan-gnome

      # CentOS
      sudo yum install epel-release
      sudo yum --enablerepo=epel install NetworkManager-strongswan-gnome
    3. 下一步,将生成的 .p12 文件安全地从 VPN 服务器传送到你的 Linux 计算机。然后提取 CA 证书,客户端证书和私钥。将下面示例中的 vpnclient.p12 换成你的 .p12 文件名。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      # 示例:提取 CA 证书,客户端证书和私钥。在完成后可以删除 .p12 文件。
      # 注:你可能需要输入 import password,它可以在 IKEv2 辅助脚本的输出中找到。
      # 如果在脚本的输出中没有 import password,请按回车键继续。
      # 注:如果使用 OpenSSL 3.x (运行 "openssl version" 进行检查),
      # 请将 "-legacy" 附加到下面的 3 个命令。
      openssl pkcs12 -in vpnclient.p12 -cacerts -nokeys -out ca.cer
      openssl pkcs12 -in vpnclient.p12 -clcerts -nokeys -out client.cer
      openssl pkcs12 -in vpnclient.p12 -nocerts -nodes -out client.key
      rm vpnclient.p12

      # (重要)保护证书和私钥文件
      # 注:这一步是可选的,但强烈推荐。
      sudo chown root.root ca.cer client.cer client.key
      sudo chmod 600 ca.cer client.cer client.key
    4. 然后你可以创建并启用 VPN 连接:
      1. 进入 Settings -> Network -> VPN。单击 + 按钮。
      2. 选择 IPsec/IKEv2 (strongswan)。
      3. 在 Name 字段中输入任意内容。
      4. 在 Gateway (Server) 部分的 Address 字段中输入 你的 VPN 服务器 IP(或者域名)。
      5. 为 Certificate 字段选择 ca.cer 文件。
      6. 在 Client 部分的 Authentication 下拉菜单选择 Certificate(/private key)。
      7. 在 Certificate 下拉菜单(如果存在)选择 Certificate/private key。
      8. 为 Certificate (file) 字段选择 client.cer 文件。
      9. 为 Private key 字段选择 client.key 文件。
      10. 在 Options 部分,选中 Request an inner IP address 复选框。
      11. 在 Cipher proposals (Algorithms) 部分,选中 Enable custom proposals 复选框。
      12. 保持 IKE 字段空白。
      13. 在 ESP 字段中输入 aes128gcm16.
      14. 单击 Add 保存 VPN 连接信息。
      15. 启用 VPN 连接。连接成功后,

如果存在连不上请查看IKEv2 故障排除

详细的参照github连接说明:https://github.com/hwdsl2/setup-ipsec-vpn