在当今数字化时代,网络安全和隐私保护变得愈发重要,VPN(Virtual Private Network)技术作为一种成熟的解决方案,能够为用户提供加密的网络连接,保护数据传输安全,同时突破地域限制访问资源,对于Linux系统管理员和开发者而言,掌握在Linux服务器上搭建VPN服务的技能至关重要,本文将详细介绍在Linux系统上安装和配置VPN服务的完整流程,涵盖PPTP、L2TP/IPSec和OpenVPN三种主流协议,帮助您构建安全可靠的私有网络环境。
准备工作
在开始安装VPN服务之前,需要做好以下准备工作:
-
系统要求:确保您的Linux服务器满足基本要求,建议使用Ubuntu 18.04/20.04 LTS或CentOS 7/8等主流发行版,服务器至少需要512MB内存和10GB磁盘空间。
-
网络环境:服务器需要拥有公网IP地址,并确保防火墙允许VPN协议使用的端口通过(如TCP 1723用于PPTP,UDP 500和4500用于L2TP/IPSec,TCP/UDP 1194用于OpenVPN)。
-
权限准备:使用root用户或具有sudo权限的账户执行安装命令。
-
域名准备(可选):为VPN服务配置一个域名可以提升便利性,特别是使用SSL证书时。
安装PPTP VPN服务
PPTP(Point-to-Point Tunneling Protocol)是最简单的VPN协议,配置容易但安全性较低,适合对安全性要求不高的内部网络使用。
安装PPTP服务端
在Ubuntu/Debian系统上:
sudo apt update sudo apt install pptpd
在CentOS/RHEL系统上:
sudo yum install epel-release sudo yum install pptpd
配置PPTP服务
编辑配置文件/etc/pptpd.conf:
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
编辑PPP选项文件/etc/ppp/options.pptpd:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
设置用户认证
编辑/etc/ppp/chap-secrets文件,添加VPN用户:
# 用户名 服务类型 密码 分配的IP
user1 pptpd pass1 *
user2 pptpd pass2 192.168.0.234
启用IP转发并配置NAT
编辑/etc/sysctl.conf,确保包含:
net.ipv4.ip_forward=1
然后执行:
sudo sysctl -p
添加iptables规则:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables-save > /etc/iptables.rules
启动服务
sudo systemctl start pptpd sudo systemctl enable pptpd
安装L2TP/IPSec VPN服务
L2TP/IPSec提供了比PPTP更高的安全性,是现代操作系统广泛支持的VPN协议。
安装必要软件
在Ubuntu/Debian上:
sudo apt install strongswan xl2tpd
在CentOS/RHEL上:
sudo yum install epel-release sudo yum install strongswan xl2tpd
配置IPSec (strongSwan)
编辑/etc/ipsec.conf:
config setup
uniqueids=never
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev1
authby=secret
ike=aes256-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha1,3des-sha1!
conn l2tp-psk
auto=add
left=%defaultroute
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
type=transport
leftauth=psk
rightauth=psk
设置预共享密钥/etc/ipsec.secrets:
%any %any : PSK "YourSharedSecret"
配置L2TP (xl2tpd)
编辑/etc/xl2tpd/xl2tpd.conf:
[global]
ipsec saref = yes
saref refinfo = 30
[lns default]
ip range = 192.168.1.100-192.168.1.200
local ip = 192.168.1.1
require chap = yes
refuse pap = yes
require authentication = yes
name = LinuxVPN
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
编辑PPP选项/etc/ppp/options.xl2tpd:
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
crtscts
idle 1800
mtu 1280
mru 1280
lock
connect-delay 5000
添加VPN用户
编辑/etc/ppp/chap-secrets:
# 用户名 服务类型 密码 分配的IP
user3 l2tpd pass3 *
user4 l2tpd pass4 192.168.1.100
配置防火墙和启动服务
sudo iptables -A INPUT -p udp --dport 500 -j ACCEPT # IKE sudo iptables -A INPUT -p udp --dport 4500 -j ACCEPT # NAT-T sudo iptables -A INPUT -p udp --dport 1701 -j ACCEPT # L2TP sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables-save > /etc/iptables.rules sudo systemctl start strongswan xl2tpd sudo systemctl enable strongswan xl2tpd
安装OpenVPN服务
OpenVPN是目前最安全、灵活的VPN解决方案,支持TCP/UDP协议,可穿越大多数防火墙。
安装OpenVPN和Easy-RSA
sudo apt install openvpn easy-rsa # Ubuntu/Debian sudo yum install openvpn easy-rsa # CentOS/RHEL
配置PKI基础设施
mkdir ~/easy-rsa ln -s /usr/share/easy-rsa/* ~/easy-rsa/ cd ~/easy-rsa ./easyrsa init-pki ./easyrsa build-ca ./easyrsa gen-req server nopass ./easyrsa sign-req server server ./easyrsa gen-dh openvpn --genkey --secret ta.key
配置OpenVPN服务器
复制示例配置文件:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server/server.conf
编辑/etc/openvpn/server/server.conf:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
启用IP转发和防火墙规则
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p sudo iptables -A INPUT -p udp --dport 1194 -j ACCEPT sudo iptables


