IPsecVPN

指采用IPSec协议来实现远程接入的一种VPN技术,IPSec全称为Internet Protocol Security,是由Internet Engineering Task Force (IETF) 定义的安全标准框架,在公网上为两个私有网络提供安全通信通道,通过加密通道保证连接的安全——在两个公共网关间提供私密数据封包服务 ---- 百度百科

一键部署

作者在GitHub上发布了在linux系统部署的脚本,下载只需要直接运行就可以部署完成,非常适合小白操作

国内网络环境问题

  • 脚本在运行中可能因为国外资源网络问题停留很长时间或者脚本终止
  • 解决方法,到脚本的191行或192行,修改其中1个地址即可,可以用nginx或其他软件自行搭建资源,也可以直接使用libreswan-3.32.tar.gz的链接进行下载

QQ截图20200827223913.png

替换后结果

QQ截图20200827224227.png

运行结果

QQ截图20200827224205.png

系统要求

一个新创建的 Amazon EC2 实例,使用这些映像之一:

请参见 详细步骤 以及 EC2 定价细节.另外,你也可以使用 CloudFormation 来快速地在 EC2 上部署.

-或者-

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

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

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

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

* Debian 10 用户需要使用标准的 Linux 内核(而不是 "cloud" 版本).

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

安装说明

Ubuntu & Debian

首先,更新你的系统: 运行 apt-get update && apt-get dist-upgrade 并重启.这一步是可选的,但推荐.

要安装 VPN,请从以下选项中选择一个:

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

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

选项 2: 编辑脚本并提供你自己的 VPN 登录凭证:

wget https://git.io/vpnsetup -O vpnsetup.sh
nano -w vpnsetup.sh
[替换为你自己的值: YOUR_IPSEC_PSK, YOUR_USERNAME 和 YOUR_PASSWORD]
sudo sh vpnsetup.sh

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

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

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

注: 如果无法通过 wget 下载,你也可以打开vpnsetup.sh (或者 vpnsetup_centos.sh).

CentOS & RHEL

首先,更新你的系统: 运行 yum update 并重启.这一步是可选的,但推荐.

按照与上面相同的步骤,但是将 https://git.io/vpnsetup 换成 https://git.io/vpnsetup-centos.

wget https://git.io/vpnsetup-centos -O vpnsetup.sh && sudo sh vpnsetup.sh

修改配置

安装完成后会返回给你连接vpn的参数

================================================

IPsec VPN server is now ready for use!

Connect to your new VPN with these details:

Server IP: 122.245.121.7
IPsec PSK: PYcN6D3SPikvnxTaNhi2
Username: vpnuser
Password: 6kvq9FTJyjiUNkkB

Write these down. You'll need them to connect!

Important notes:   https://git.io/vpnnotes
Setup VPN clients: https://git.io/vpnclients
IKEv2 guide:       https://git.io/ikev2

================================================

占用端口

  • 500,1701,4500

手动修改密钥,用户和密码

  • 在安装脚本中,找到了相关配置文件的路径和脚本中设置参数的源码
  • 修改完成后需要重启服务systemctl restart ipsec xl2tpd
# Specify IPsec PSK
conf_bk "/etc/ipsec.secrets"
cat > /etc/ipsec.secrets <<EOF
%any  %any  : PSK "$VPN_IPSEC_PSK"
EOF

#PSK密钥可以修改为任意字符串,一个安全的 IPsec PSK 应该至少包含 20 个随机字符

# Create VPN credentials
#l2tpd
conf_bk "/etc/ppp/chap-secrets"
cat > /etc/ppp/chap-secrets <<EOF
"$VPN_USER" l2tpd "$VPN_PASSWORD" *
EOF

#l2tpd添加第二个用户,格式为: "$VPN_USER" l2tpd "$VPN_PASSWORD" *

conf_bk "/etc/ipsec.d/passwd"
VPN_PASSWORD_ENC=$(openssl passwd -1 "$VPN_PASSWORD")
cat > /etc/ipsec.d/passwd <<EOF
$VPN_USER:$VPN_PASSWORD_ENC:xauth-psk
EOF

#密码部分需要进行加密: VPN_PASSWORD_ENC=$(openssl passwd -1 "$VPN_PASSWORD")
#ipsec添加第二个用户格式为: $VPN_USER:$VPN_PASSWORD_ENC:xauth-psk

其他相关配置文件

#
SWAN_VER=3.32
swan_file="libreswan-$SWAN_VER.tar.gz"
swan_url1="https://github.com/libreswan/libreswan/archive/v$SWAN_VER.tar.gz"
swan_url2="https://download.libreswan.org/$swan_file"
if ! { wget -t 3 -T 30 -nv -O "$swan_file" "$swan_url1" || wget -t 3 -T 30 -nv -O "$swan_file" "$swan_url2"; }; then
  exit 1
fi
/bin/rm -rf "/opt/src/libreswan-$SWAN_VER"
tar xzf "$swan_file" && /bin/rm -f "$swan_file"
cd "libreswan-$SWAN_VER" || exit 1
cat > Makefile.inc.local <<'EOF'
WERROR_CFLAGS = -w
USE_DNSSEC = false
USE_DH2 = true
USE_DH31 = false
USE_NSS_AVA_COPY = true
USE_NSS_IPSEC_PROFILE = false
USE_GLIBC_KERN_FLIP_HEADERS = true
EOF

# Create xl2tpd config
conf_bk "/etc/xl2tpd/xl2tpd.conf"
cat > /etc/xl2tpd/xl2tpd.conf <<EOF
[global]
port = 1701

# Set xl2tpd options
conf_bk "/etc/ppp/options.xl2tpd"
cat > /etc/ppp/options.xl2tpd <<EOF
+mschap-v2
ipcp-accept-local
ipcp-accept-remote
noccp
auth
mtu 1280
mru 1280
proxyarp
lcp-echo-failure 4
lcp-echo-interval 30
connect-delay 5000
ms-dns $DNS_SRV1
EOF


#
F2B_FILE=/etc/fail2ban/jail.local
if [ ! -f "$F2B_FILE" ]; then
  bigecho "Creating basic Fail2Ban rules..."
cat > "$F2B_FILE" <<'EOF'
[ssh-iptables]
enabled = true
filter = sshd
logpath = /var/log/secure
EOF

#
  if [ "$use_nft" = "1" ]; then
cat >> "$F2B_FILE" <<'EOF'
port = ssh
banaction = nftables-multiport[blocktype=drop]
EOF
  else
cat >> "$F2B_FILE" <<'EOF'
action = iptables[name=SSH, port=ssh, protocol=tcp]
EOF
  fi
fi

VPN 客户端

所有系统都可以尝试使用系统自带的连接方式,windows系统可以下载该客户端进行操作

安装时需要注意标准版和专业版

QQ截图20200827231222.png

Windows 错误 809

错误 809:无法建立计算机与 VPN 服务器之间的网络连接,因为远程服务器未响应。这可能是因为未将计算机与远程服务器之间的某种网络设备(如防火墙、NAT、路由器等)配置为允许 VPN 连接。请与管理员或服务提供商联系以确定哪种设备可能产生此问题。

要解决此错误,在首次连接之前需要修改一次注册表,以解决 VPN 服务器 和/或 客户端与 NAT (比如家用路由器)的兼容问题。请下载并导入下面的 .reg 文件,或者打开 提升权限命令提示符 并运行以下命令。完成后必须重启计算机。

  • 适用于 Windows Vista, 7, 8.x 和 10 (下载 .reg 文件)

    REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f
  • 仅适用于 Windows XP (下载 .reg 文件)

    REG ADD HKLM\SYSTEM\CurrentControlSet\Services\IPSec /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f

另外,某些个别的 Windows 系统配置禁用了 IPsec 加密,此时也会导致连接失败。要重新启用它,可以运行以下命令并重启。

  • 适用于 Windows XP, Vista, 7, 8.x 和 10 (下载 .reg 文件)

    REG ADD HKLM\SYSTEM\CurrentControlSet\Services\RasMan\Parameters /v ProhibitIpSec /t REG_DWORD /d 0x0 /f

Windows 错误 628 或 766

错误 628:在连接完成前,连接被远程计算机终止。

错误 766:找不到证书。使用通过 IPSec 的 L2TP 协议的连接要求安装一个机器证书。它也叫做计算机证书。

要解决这些错误,请按以下步骤操作:

  1. 右键单击系统托盘中的无线/网络图标。
  2. 选择 打开网络和共享中心。或者,如果你使用 Windows 10 版本 1709 或以上,选择 打开"网络和 Internet"设置,然后在打开的页面中单击 网络和共享中心
  3. 单击左侧的 更改适配器设置。右键单击新的 VPN 连接,并选择 属性
  4. 单击 安全 选项卡,从 VPN 类型 下拉菜单中选择 "使用 IPsec 的第 2 层隧道协议 (L2TP/IPSec)"。
  5. 单击 允许使用这些协议。选中 "质询握手身份验证协议 (CHAP)" 和 "Microsoft CHAP 版本 2 (MS-CHAP v2)" 复选框。
  6. 单击 高级设置 按钮。
  7. 单击 使用预共享密钥作身份验证 并在 密钥 字段中输入你的 VPN IPsec PSK
  8. 单击 确定 关闭 高级设置
  9. 单击 确定 保存 VPN 连接的详细信息。

Windows 10 正在连接

如果你使用 Windows 10 并且 VPN 卡在 "正在连接" 状态超过几分钟,尝试以下步骤:

  1. 右键单击系统托盘中的无线/网络图标。
  2. 选择 打开"网络和 Internet"设置,然后在打开的页面中单击左侧的 VPN
  3. 选择新的 VPN 连接,然后单击 连接。如果出现提示,在登录窗口中输入 你的 VPN 用户名密码 ,并单击 确定

Windows 10 升级

在升级 Windows 10 版本之后 (比如从 1709 到 1803),你可能需要重新按照上面的 Windows 错误 809 中的步骤修改注册表并重启。

Windows 8/10 DNS 泄漏

Windows 8.x 和 10 默认使用 "smart multi-homed name resolution" (智能多宿主名称解析)。如果你的因特网适配器的 DNS 服务器在本地网段上,在使用 Windows 自带的 IPsec VPN 客户端时可能会导致 "DNS 泄漏"。要解决这个问题,你可以 禁用智能多宿主名称解析,或者配置你的因特网适配器以使用在你的本地网段之外的 DNS 服务器(比如 8.8.8.8 和 8.8.4.4)。在完成后清除 DNS 缓存并且重启计算机。

另外,如果你的计算机启用了 IPv6,所有的 IPv6 流量(包括 DNS 请求)都将绕过 VPN。要在 Windows 上禁用 IPv6,请看这里