如今,VPN 技术越来越流行。普通用户使用 VPN 可以安全地访问互联网。它还可以帮助绕过本地屏蔽的网站和服务,并防止可能的外部恶意行为。当您连接到 VPN 服务器时,您的计算机和服务器之间会有一个安全隧道,无法从外部访问,因此 VPN 服务器将成为您的互联网接入点。市面上有很多 VPN 服务,既有免费的也有付费的,但如果它们由于某种原因不适合您,您可以随时配置自己的 VPN 服务器。
要运行自己的VPN,你应该 租用VPS服务器。有多种软件可用于创建 VPN 连接。它们之间的区别在于支持的操作系统和使用的算法。我们将介绍两种设置 VPN 服务器的独立方法。第一种方法基于 PPTP 协议,该协议已被视为过时且不安全,但配置起来非常容易。另一种方法采用现代且安全的软件 OpenVPN,但需要安装第三方客户端应用程序和更彻底的设置过程。
在我们的测试环境中,我们将使用由 Ubuntu Server 18.04 提供支持的虚拟服务器。服务器上的防火墙将被关闭,因为其配置值得单独写一篇文章。我们将描述 Windows 10 上的设置过程。
准备
无论选择哪个 VPN 服务器,互联网访问都将通过操作系统的集成方式进行设置。为了通过外部服务接口打开互联网访问,您必须允许接口之间的数据包转发并配置网络地址转换。
要打开数据包转发,请打开文件 “/etc/sysctl.conf” 并改变 “net.ipv4.ip_forward” 参数值转换为 1.
为了在不重新启动计算机的情况下应用更改,请运行以下命令
sudo sysctl -p /etc/sysctl.conf
网络地址转换是通过 iptables的。首先,运行以下命令检查外部网络接口的名称 “ip链接秀” - 下一步您将需要它。我们的名字是 “ens3”.
在所有本地网络节点的外部接口上启用网络地址转换。
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
注意,您需要指定您服务器接口的真实名称,它可以与我们的不同。
默认情况下,iptables 创建的所有规则在服务器重启后都会重置。为了防止这种情况,请使用 “iptables-持久” 实用程序。安装以下数据包:
sudo apt install iptables-persistent
在安装过程中的某个时刻,您将看到一个配置窗口,建议您保存当前的 iptables 规则。由于规则已经定义,只需确认并单击 “是” 两次。从现在起,规则将在服务器重启后自动应用。
PPTP服务器
服务器配置
安装包:
sudo apt install pptpd
安装结束后,打开文件 “/etc/pptpd.conf” 在任何文本编辑器中并像这样编辑:
option /etc/ppp/pptpd-options #path to the settings file
logwtmp #client connections logging mechanism
connections 100 #number of simultaneous connections
localip 172.16.0.1 #the address that will serve as a client gateway
remoteip 172.16.0.2-200 #range of addresses
之后,编辑文件 “/etc/ppp/pptpd-选项”. 大部分参数均采用默认设置。
#name of the service for new client records
name pptpd
#restrict obsolete authentication methods
refuse-pap
refuse-chap
refuse-mschap
#allow a more secure authentication method
require-mschap-v2
#enable encryption
require-mppe-128
#specify dns servers for clients (use any available servers)
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
在下一阶段,您需要为客户端连接创建记录。假设您要添加一个用户 “vpn用户” 与密码 “1” 并允许他动态寻址。打开文件 “/etc/ppp/chap-secrets” 并在文件末尾添加以下包含用户参数的行:
vpnuser pptpd 1 *
“pptpd” value 是我们在文件中指定的服务的名称 “pptpd 选项”。 代替 “*” 您可以指定一个固定的 IP 地址。结果中,文件 “chap-secrets” 应该看起来像这样:
要应用设置重置 PPTP 服务并将其添加到自动加载。
sudo systemctl restart pptpd
sudo systemctl enable pptpd
服务器配置已完成。
客户端配置
可选 “开始” - “设置” - 网络与互联网 - “ VPN” 并点击 “添加 VPN 连接”
在打开的窗口中输入连接参数,然后点击 “保存”
- VPN 提供商:“Windows(内置)”
- 连接名称:“vpn_connect”(您可以选择任意名称)
- 服务器名称或地址:(指定服务器的外部IP地址)
- VPN 类型:“自动”
- 登录信息类型:“用户名和密码”
- 用户名: vpn用户 (服务器上的“chap-secrets”文件中指定的名称)
- 密码: 1 (如“chap-secrets”文件)
保存参数后,您将在窗口中看到新的 VPN 连接。左键单击连接并选择 “连接”。如果连接成功,您将看到 “连接的” 状态。
在选项中,您将找到客户端和服务器的内部地址。字段 “目的地址” 显示外部服务器地址。
连接后,服务器的内部 IP 地址, 172.16.0.1 在我们的例子中,成为所有传出数据包的默认网关。
使用任何在线服务,您都可以确保计算机的外部 IP 地址现在与您的 VPN 服务器的 IP 地址相同。
OpenVPN服务器
服务器配置
让我们提升当前用户的权限级别,因为对于进一步的配置,我们将需要 root 访问权限。
sudo -s
安装所有必要的包。我们需要 “Easy-RSA” 数据包来管理加密密钥。
apt install openvpn easy-rsa iptables-persistent
允许通过 UDP 协议在端口 1194 上进行传入连接并应用 iptables 规则。
sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
sudo netfilter-persistent save
创建一个包含从“Easy-RSA”包复制的文件的目录并导航到该目录。
make-cadir ~/openvpn
cd ~/openvpn
生成公钥基础设施 (PKI)。
./easyrsa init-pki
生成证书颁发机构 (CA) 根证书。
./easyrsa build-ca
在创建过程中,系统会提示您设置并记住密码。您还需要回答问题并输入密钥所有者的信息。您可以保留方括号中提供的默认值。按“Enter”键完成输入。
生成私钥和证书请求。作为参数,指定一个任意名称;在本例中,它是“vpn-server”。
./easyrsa gen-req vpn-server nopass
将通用名称值保留为默认值。
对生成的服务器证书请求进行签名。
./easyrsa sign-req server vpn-server
这一步回答“是”确认签名,然后输入生成根证书时创建的密码。
生成 Diffie-Hellman 参数。这些参数用于服务器和客户端之间的安全密钥交换。
./easyrsa gen-dh
所有必要的文件都已生成。让我们在 OpenVPN 工作目录中创建一个“keys”文件夹来存储密钥,并将创建的文件复制到那里。
mkdir /etc/openvpn/keys
sudo cp pki/ca.crt pki/issued/vpn-server.crt pki/private/vpn-server.key pki/dh.pem /etc/openvpn/keys
使用以下方式配置 NAT iptables 规则。创建一个名为 nat 并在 /etc/openvpn/ 目录。
#!/bin/sh
# Reset firewall settings
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Allow OpenVPN connections (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
# (eth0 in our case, may vary):
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
# (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable masquerading for the local network (eth0 in our case, may vary)
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
# Deny incoming connections from outside
iptables -A INPUT -i eth0 -j DROP
# Deny transit traffic from outside (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -j DROP
sudo netfilter-persistent save
保存文件并使其可执行。
sudo chmod 755 /etc/openvpn/nat
复制服务器配置模板。
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
打开文件 “/etc/openvpn/server.conf” 为了进行编辑,请确保它包含以下行,并根据需要编辑它们:
#Port, protocol, and interface
port 1194
proto udp
dev tun
#Path to the encryption keys
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn-server.crt
key /etc/openvpn/keys/vpn-server.key
dh /etc/openvpn/keys/dh.pem
#SHA256 Hashing Algorithm
auth SHA256
#Switching off additional encryption
#tls-auth ta.key 0
#Network parameters
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Ping every 10 seconds to check the connection.
keepalive 10 120
#Set up AES-256 encryption for the tunnel.
cipher AES-256-GCM
#Demoting the service OpenVPN after launch
user nobody
group nogroup
#Switching on parameters saving after reboot
persist-key
persist-tun
#Set log verbosity
verb 3
#Redirecting logs
log-append /var/log/openvpn/openvpn.log
#Script the rule installation launch.
up /etc/openvpn/nat
在服务器上启用流量转发。
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
启动 OpenVPN 以应用配置。
systemctl restart openvpn@server
服务器配置已完成!
客户端配置
前往OpenVPN官方网站“https://openvpn.net”,转到 “社区” 部分。
向下滚动并下载适用于您的操作系统版本的安装程序。在我们的例子中,它是 Windows 11 ARM64。
安装应用程序时,所有参数均保留默认设置。
在下一个阶段,您需要在服务器上准备以下文件并将其传输到客户端计算机:
- 公钥和私钥;
- 认证中心密钥的副本;
- 配置文件模板。
连接到服务器,提升权限,并导航到我们创建的目录 "~/openvpn".
sudo -s
cd ~/openvpn
为客户端生成私钥和证书请求。参数中指定任意名称;在本例中为“client1”。
./easyrsa gen-req client1 nopass
输入我们在创建根证书时设置的密码,并将 Common Name 值保留为默认值。
对生成的客户端证书请求进行签名。
./easyrsa sign-req client client1
这一步回答“是”确认签名,然后输入生成根证书时创建的密码。
为了方便起见,我们在主目录中创建一个名为“client1”的文件夹,并将所有要传输到客户端计算机的文件复制到其中。
mkdir ~/client1
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/
将客户端配置文件模板复制到同一目录。将文件扩展名更改为 “ .ovpn” 复制时。
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
更改目录和所有文件的所有者 “〜/ client1 /” 能够将它们分发给客户端。让我们 “米哈伊尔” 在我们的案例中是所有者。
chown -R mihail:mihail ~/client1
转到客户端计算机并复制 “〜/ client1 /” 文件夹。您可以借助 “PSCP” 实用程序,与 Putty 配合使用。
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
您可以存储密钥文件 “ca.crt”, “客户端1.crt”, “client1.key” 任何你想要的地方。在我们的例子中,它们位于此文件夹中 “c:\Program Files\OpenVPN\keys”,我们模式化配置文件 “客户端.ovpn” 到 “c:\Program Files\OpenVPN\config” 目录。
现在让我们开始配置客户端。打开文件 “c:\Program Files\OpenVPN\config\client.ovpn” 在文本编辑器中编辑以下行:
#announce that this is the client
client
#interface and protocol just like on the server
dev tun
proto udp
#IP address of the server and port
remote ip_address 1194
#saving parameters after reload
persist-key
persist-tun
#key paths
ca “c:\\Program Files\\OpenVPN\\keys\\ca.cert”
cert “c:\\Program Files\\OpenVPN\\keys\\client1.crt”
key “c:\\Program Files\\OpenVPN\\keys\\client1.key”
#enable server verification
remote-cert-tls server
#disable extra encryption
#tls-auth ta.key 1
cipher AES-256-CBC
auth-nocache
verb 3
其余部分保持不变。
保存文件并启动客户端应用程序 “OpenVPN 图形用户界面”.
右键单击任务栏中的应用程序图标,然后选择 “连接”。如果连接成功,图标将变为绿色。
使用任何在线服务确保您的公共 IP 地址已更改并且现在与服务器的 IP 地址相同。