


網站
https://github.com/hwdsl2/setup-ipsec-vpn

中文網站
https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md#%E9%87%8D%E8%A6%81%E6%8F%90%E7%A4%BA




1..Quick start
First, prepare your Linux server* with a fresh install of one of the following OS.


網站
https://github.com/hwdsl2/setup-ipsec-vpn

中文網站
https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md#%E9%87%8D%E8%A6%81%E6%8F%90%E7%A4%BA




1..Quick start
First, prepare your Linux server* with a fresh install of one of the following OS.

Use this one-liner to set up an IPsec VPN server:

Ubuntu & Debian
wget https://git.io/vpnsetup -O vpn.sh && sudo sh vpn.sh && sudo /opt/src/ikev2.sh --auto



2..Installation

First, update your system with apt-get update && apt-get dist-upgrade (Ubuntu/Debian) or yum update and reboot. 
This is optional, but recommended.

To install the VPN, please choose one of the following options:


Option 1: Have the script generate random VPN credentials for you (will be displayed when finished):

Ubuntu & Debian
wget https://git.io/vpnsetup -O vpn.sh && sudo sh vpn.sh



After successful installation, it is recommended to set up IKEv2:

sudo bash /opt/src/ikev2.sh --auto


Option 2: Edit the script and provide your own VPN credentials:

Ubuntu & Debian
wget https://git.io/vpnsetup -O vpn.sh
nano -w vpn.sh
[Replace with your own values: YOUR_IPSEC_PSK, YOUR_USERNAME and YOUR_PASSWORD]
sudo sh vpn.sh

重點來了
Note: A secure IPsec PSK should consist of at least 20 random characters.

After successful installation, it is recommended to set up IKEv2:


sudo bash /opt/src/ikev2.sh --auto
Option 3: Define your VPN credentials as environment variables:

Ubuntu & Debian
# All values MUST be placed inside 'single quotes'
# DO NOT use these special characters within values: \ " '
wget https://git.io/vpnsetup -O vpn.sh
sudo VPN_IPSEC_PSK='your_ipsec_pre_shared_key' \
VPN_USER='your_vpn_username' \
VPN_PASSWORD='your_vpn_password' \
sh vpn.sh


After successful installation, it is recommended to set up IKEv2:

sudo bash /opt/src/ikev2.sh --auto

Note: If unable to download via wget, you may also open vpnsetup.sh, 
vpnsetup_centos.sh or vpnsetup_amzn.sh, and click the Raw button on the right. 
Press Ctrl-A to select all, Ctrl-C to copy, 
then paste into your favorite editor.


Next steps
Get your computer or device to use the VPN. Please refer to:

-------------------------------------------------------

快速开始
首先，在你的 Linux 服务器* 上全新安装以下系统之一。

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

Ubuntu & Debian
wget https://git.io/vpnsetup -O vpn.sh && sudo sh vpn.sh && sudo /opt/src/ikev2.sh --auto

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

如需了解其它安装选项，以及如何配置 VPN 客户端，请继续阅读以下部分。

* 一个专用服务器或者虚拟专用服务器 (VPS)。OpenVZ VPS 不受支持。

功能特性
新: 增加支持更高效的 IPsec/XAuth ("Cisco IPsec") 和 IKEv2 模式
新: 现在可以下载 VPN 服务器的预构建 Docker 镜像
全自动的 IPsec VPN 服务器配置，无需用户输入
封装所有的 VPN 流量在 UDP 协议，不需要 ESP 协议支持
可直接作为 Amazon EC2 实例创建时的用户数据使用
包含 sysctl.conf 优化设置，以达到更佳的传输性能
已测试：Ubuntu, Debian, CentOS/RHEL 和 Amazon Linux 2

系统要求
一个新创建的 Amazon EC2 实例，使用这些映像之一：

Ubuntu 20.04 (Focal) 或者 18.04 (Bionic)
Debian 10 (Buster)* 或者 9 (Stretch)
CentOS 8** 或者 7
Red Hat Enterprise Linux (RHEL) 8 或者 7
Amazon Linux 2
请参见 详细步骤 以及 EC2 定价细节。另外，你也可以使用 CloudFormation 来快速部署。

-或者-

一个专用服务器或者虚拟专用服务器 (VPS)，全新安装以上操作系统之一。
OpenVZ VPS 不受支持，用户可以另外尝试 OpenVPN。

这也包括各种公共云服务中的 Linux 虚拟机，比如 DigitalOcean, Vultr, Linode, Google Compute Engine, 
Amazon Lightsail, Microsoft Azure, IBM Cloud, OVH 和 Rackspace。

» 我想建立并使用自己的 VPN ，但是没有可用的服务器

高级用户可以在一个 $35 的 Raspberry Pi 上搭建 VPN 服务器。参见 [1] [2]。

* Debian 10 用户需要使用标准的 Linux 内核（而不是 "cloud" 版本）。
更多信息请看 这里。
如果你在 EC2 上使用 Debian 10，你必须首先换用标准的 Linux 内核，然后运行 VPN 安装脚本。
** CentOS Linux 8 的支持将于2021年12月31日结束。更多信息请看 这里。

⚠️ 不要 在你的 PC 或者 Mac 上运行这些脚本！它们只能用在服务器上！



安装说明
首先，更新你的系统：运行 apt-get update && apt-get dist-upgrade (Ubuntu/Debian) 或者 yum update 并重启。这一步是可选的，但推荐。

要安装 VPN，请从以下选项中选择一个：

选项 1: 使用脚本随机生成的 VPN 登录凭证 （完成后会在屏幕上显示）：

Ubuntu & Debian
wget https://git.io/vpnsetup -O vpn.sh && sudo sh vpn.sh


在安装成功之后，推荐 配置 IKEv2：

sudo bash /opt/src/ikev2.sh --auto
选项 2: 编辑脚本并提供你自己的 VPN 登录凭证：

Ubuntu & Debian
wget https://git.io/vpnsetup -O vpn.sh

[替换为你自己的值： YOUR_IPSEC_PSK, YOUR_USERNAME 和 YOUR_PASSWORD]
sudo sh vpn.sh


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

在安装成功之后，推荐 配置 IKEv2：

sudo bash /opt/src/ikev2.sh --auto


选项 3: 将你自己的 VPN 登录凭证定义为环境变量：

Ubuntu & Debian
# 所有变量值必须用 '单引号' 括起来
# *不要* 在值中使用这些字符：  \ " '
wget https://git.io/vpnsetup -O vpn.sh
sudo VPN_IPSEC_PSK='你的IPsec预共享密钥' \
VPN_USER='你的VPN用户名' \
VPN_PASSWORD='你的VPN密码' \
sh vpn.sh

在安装成功之后，推荐 配置 IKEv2：

sudo bash /opt/src/ikev2.sh --auto
注： 如果无法通过 wget 下载，你也可以打开 vpnsetup.sh，vpnsetup_centos.sh 
或者 vpnsetup_amzn.sh，然后点击右方的 Raw 按钮。按快捷键 Ctrl-A 全选， 
Ctrl-C 复制，然后粘贴到你喜欢的编辑器。


下一步
配置你的计算机或其它设备使用 VPN 。请参见：

配置 IPsec/L2TP VPN 客户端

配置 IPsec/XAuth ("Cisco IPsec") VPN 客户端

IKEv2 VPN 配置和使用指南

如果在连接过程中遇到错误，请参见 故障排除。

开始使用自己的专属 VPN ! ✨🎉🚀✨




















------------------------------------
升级Libreswan
在 extras/ 目录提供额外的脚本，可用于升级 Libreswan（更新日志 | 通知列表）。
请在运行前根据需要修改 SWAN_VER 变量。目前支持的最新版本是 4.4。查看已安装版本：ipsec --version。

Ubuntu & Debian
wget https://git.io/vpnupgrade -O vpnup.sh && sudo sh vpnup.sh
CentOS & RHEL
Amazon Linux 2
高级用法
其他语言版本: English, 简体中文.

使用其他的 DNS 服务器
域名和更改服务器 IP
VPN 内网 IP 和流量
访问 VPN 服务器的网段
仅限 IKEv2 的 VPN
更改 IPTables 规则
使用其他的 DNS 服务器
在 VPN 已连接时，客户端配置为使用 Google Public DNS。如果偏好其它的域名解析服务，
你可以编辑以下文件：/etc/ppp/options.xl2tpd, /etc/ipsec.conf 和 /etc/ipsec.d/ikev2.conf（如果存在），
并替换 8.8.8.8 和 8.8.4.4。然后运行 service ipsec restart 和 service xl2tpd restart。

高级用户可以在运行 VPN 安装脚本和 IKEv2 辅助脚本 时定义 VPN_DNS_SRV1 和 VPN_DNS_SRV2（可选）。比如你想使用 Cloudflare 的 DNS 服务：

sudo VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1 sh vpn.sh
sudo VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1 bash /opt/src/ikev2.sh --auto
域名和更改服务器 IP
对于 IPsec/L2TP 和 IPsec/XAuth ("Cisco IPsec") 模式，
你可以在不需要额外配置的情况下使用一个域名（比如 vpn.example.com）而不是 IP 地址连接到 VPN 服务器。另外，
一般来说，在服务器的 IP 更改后，比如在恢复一个映像到具有不同 IP 的新服务器后，VPN 会继续正常工作，虽然可能需要重启服务器。

对于 IKEv2 模式，如果你想要 VPN 在服务器的 IP 更改后继续正常工作，则必须在 配置 IKEv2 时指定一个域名作为 VPN 服务器的地址。
该域名必须是一个全称域名(FQDN)。示例如下：

sudo VPN_DNS_NAME='vpn.example.com' bash /opt/src/ikev2.sh --auto
另外，你也可以自定义 IKEv2 安装选项，通过在运行 辅助脚本 时去掉 --auto 参数来实现。

VPN 内网 IP 和流量
在使用 IPsec/L2TP 模式连接时，VPN 服务器在虚拟网络 192.168.42.0/24 内具有内网 IP 192.168.42.1。
为客户端分配的内网 IP 在这个范围内：192.168.42.10 到 192.168.42.250。要找到为特定的客户端分配的 IP，
可以查看该 VPN 客户端上的连接状态。

在使用 IPsec/XAuth ("Cisco IPsec") 或 IKEv2 模式连接时，
VPN 服务器在虚拟网络 192.168.43.0/24 内 没有 内网 IP。
为客户端分配的内网 IP 在这个范围内：192.168.43.10 到 192.168.43.250。

你可以使用这些 VPN 内网 IP 进行通信。
但是请注意，为 VPN 客户端分配的 IP 是动态的，
而且客户端设备上的防火墙可能会阻止这些流量。

仅适用于 IPsec/L2TP 模式：你可以将静态 IP 分配给 VPN 客户端。这是可选的。点这里查看详情。
在默认配置下，允许客户端之间的流量。如果你想要 不允许 客户端之间的流量，
可以在 VPN 服务器上运行以下命令。将它们添加到 /etc/rc.local 以便在重启后继续有效。

iptables -I FORWARD 2 -i ppp+ -o ppp+ -s 192.168.42.0/24 -d 192.168.42.0/24 -j DROP
iptables -I FORWARD 3 -s 192.168.43.0/24 -d 192.168.43.0/24 -j DROP
访问 VPN 服务器的网段
连接到 VPN 后，VPN 客户端通常可以访问与 VPN 服务器位于同一本地子网内的其他设备上运行的服务，
而无需进行其他配置。例如，如果 VPN 服务器的本地子网为 192.168.0.0/24，
并且一个 Nginx 服务器在 IP 192.168.0.2 上运行，则 VPN 客户端可以使用 IP 192.168.0.2来访问 Nginx 服务器。

请注意，如果 VPN 服务器具有多个网络接口（例如 eth0 和 eth1），
并且你想要 VPN 客户端访问服务器上 不用于 Internet 访问的网络接口后面的本地子网，则需要进行额外的配置。
在此情形下，你必须运行以下命令来添加 IPTables 规则。为了在重启后仍然有效，你可以将这些命令添加到 /etc/rc.local。

# 将 eth1 替换为 VPN 服务器上你想要客户端访问的网络接口名称
netif=eth1
iptables -I FORWARD 2 -i "$netif" -o ppp+ -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 2 -i ppp+ -o "$netif" -j ACCEPT
iptables -I FORWARD 2 -i "$netif" -d 192.168.43.0/24 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 2 -s 192.168.43.0/24 -o "$netif" -j ACCEPT
iptables -t nat -I POSTROUTING -s 192.168.43.0/24 -o "$netif" -m policy --dir out --pol none -j MASQUERADE
iptables -t nat -I POSTROUTING -s 192.168.42.0/24 -o "$netif" -j MASQUERADE
仅限 IKEv2 的 VPN
Libreswan 4.2 和更新版本支持 ikev1-policy 配置选项。使用此选项，
高级用户可以设置仅限 IKEv2 的 VPN，即 VPN 服务器仅接受 IKEv2 连接，
而 IKEv1 连接（包括 IPsec/L2TP 和 IPsec/XAuth ("Cisco IPsec") 模式）将被丢弃。

要设置仅限 IKEv2 的 VPN，首先按照本自述文件中的说明安装 VPN 服务器并且配置 IKEv2。
然后使用 ipsec --version 命令检查 Libreswan 版本并 更新 Libreswan（如果需要）。
下一步，编辑 VPN 服务器上的 /etc/ipsec.conf。在 config setup 小节的末尾添加 ikev1-policy=drop，
开头必须空两格。保存文件并运行 service ipsec restart。在完成后，你可以使用 ipsec status 命令来验证仅启用了 ikev2-cp 连接。

更改 IPTables 规则
如果你想要在安装后更改 IPTables 规则，
请编辑 /etc/iptables.rules 和/或 /etc/iptables/rules.v4 (Ubuntu/Debian)，
或者 /etc/sysconfig/iptables (CentOS/RHEL)。然后重启服务器。

问题和反馈
有问题需要提问？请先搜索已有的留言，在 这个 Gist 以及 我的博客。
VPN 的相关问题可在 Libreswan 或 strongSwan 邮件列表提问，或者参考这些网站： [1] [2] [3] [4] [5]。
如果你发现了一个可重复的程序漏洞，请提交一个 GitHub Issue。
卸载说明
请参见 卸载 VPN。

另见
IPsec VPN Server on Docker





