凌峰创科服务平台

Linux如何搭建VPN服务器?

在Linux系统中搭建VPN服务器是企业或个人用户保障数据安全、实现远程访问的常用方式,以下以OpenVPN为例,详细介绍在Linux(以Ubuntu 20.04 LTS为例)环境下搭建VPN服务器的完整流程,包括环境准备、安装配置、证书生成及客户端连接等关键步骤。

Linux如何搭建VPN服务器?-图1
(图片来源网络,侵删)

环境准备

  1. 系统要求:确保Linux服务器已更新至最新状态,推荐使用Ubuntu 20.04 LTS或CentOS 7等稳定版本,具备公网IP地址(或已正确配置端口转发),且开放TCP/1194端口(OpenVPN默认端口)。

  2. 安装依赖

    • Ubuntu/Debian系统:
      sudo apt update && sudo apt install -y openvpn easy-rsa openssl
    • CentOS/RHEL系统:
      sudo yum install -y openvpn easy-rsa openssl
  3. 创建证书目录
    为便于管理,创建证书存放目录并复制Easy-RSA模板文件:

    mkdir -p ~/openvpn-ca && cp -r /usr/share/easy-rsa/* ~/openvpn-ca/
    cd ~/openvpn-ca/

生成CA证书与服务器证书

VPN的安全性依赖于证书体系,需依次生成CA证书、服务器证书及Diffie-Hellman参数。

  1. 初始化PKI架构
    编辑vars文件,配置证书默认参数(如国家、组织、邮箱等),或直接运行以下命令生成临时变量:

    export EASY_RSA="`pwd`" export VARS_FILE="$EASY_RSA/vars"  
    echo "set_var EASY_RSA \"$EASY_RSA\"" >vars  
    echo "set_var KEY_SIZE 2048" >>vars  
    echo "set_var DAYS 3650" >>vars  
  2. 构建CA证书

    ./easyrsa init-pki  
    ./easyrsa build-ca nopass  #nopass表示不设置CA密码,根据需求选择  

    执行后会在pca/ca.crt生成CA证书文件,需将其复制到OpenVPN配置目录。

  3. 生成服务器证书

    ./easyrsa gen-req server nopass  #生成服务器私钥与请求文件  
    ./easyrsa sign-req server server  #使用CA证书签署服务器请求  

    签署完成后,会生成pca/issued/server.crtpca/private/server.key(私钥需严格保密)。

  4. 生成Diffie-Hellman参数
    用于增强密钥交换安全性,过程较耗时,请耐心等待:

    ./easyrsa gen-dh  

    生成的pca/dh.pem文件需复制到配置目录。

配置OpenVPN服务

  1. 创建服务器配置文件
    复制OpenVPN模板配置文件并修改:

    sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/  
    sudo gzip -d /etc/openvpn/server.conf.gz  
    sudo nano /etc/openvpn/server.conf  

    关键配置项如下:

    配置项 说明
    port 1194 监听端口,默认为TCP 1194,可修改为其他端口(需同步防火墙规则)
    proto tcp 传输协议,可选TCP(更稳定)或UDP(更快)
    dev tun 虚拟网卡类型,tun为三层路由模式,tap为二层桥接模式
    ca /etc/openvpn/ca.crt CA证书路径(需将之前生成的ca.crt复制到该目录)
    cert /etc/openvpn/server.crt 服务器证书路径
    key /etc/openvpn/server.key 服务器私钥路径(权限需设置为600)
    dh /etc/openvpn/dh.pem DH参数文件路径
    server 10.8.0.0 255.255.255.0 定义VPN客户端IP段,可根据需求调整
    push "redirect-gateway def1" 客户端所有流量通过VPN转发
    push "dhcp-option DNS 8.8.8.8" 为客户端指定DNS服务器(如Google DNS)
    keepalive 10 120 保活机制,每10秒检测一次,120秒无响应则断开连接
    comp-lzo 启用LZO压缩,提升传输效率
    user nobody group nogroup 以低权限用户运行,提升安全性
    persist-key persist-tun 防止连接中断时重新读取密钥或重启网卡
  2. 配置系统转发
    编辑/etc/sysctl.conf文件,取消注释net.ipv4.ip_forward=1,然后执行sudo sysctl -p启用IP转发。

  3. 设置防火墙规则

    sudo ufw allow 1194/tcp  #开放VPN端口  
    sudo ufw allow OpenSSH   #确保SSH连接不受影响  
    sudo ufw enable         #启用防火墙  

启动服务与客户端配置

  1. 启动OpenVPN服务

    sudo systemctl start openvpn@server  
    sudo systemctl enable openvpn@server  #设置开机自启  
  2. 生成客户端证书
    在CA目录下为每个客户端生成独立证书(以client1为例):

    cd ~/openvpn-ca  
    ./easyrsa gen-req client1 nopass  
    ./easyrsa sign-req client client1  

    pca/issued/client1.crtpca/private/client1.keypca/ca.crt复制到客户端设备。

  3. 创建客户端配置文件
    在服务器上创建client1.ovpn如下:

    client  
    dev tun  
    proto tcp  
    remote 服务器公网IP 1194  #替换为实际服务器IP  
    resolv-retry infinite  
    nobind  
    persist-key  
    persist-tun  
    remote-cert-tls server  
    cipher AES-256-CBC  
    comp-lzo  
    key-direction 1  
    <ca>  
    -----BEGIN CERTIFICATE-----  
    [此处粘贴ca.crt内容]  
    -----END CERTIFICATE-----  
    </ca>  
    <cert>  
    -----BEGIN CERTIFICATE-----  
    [此处粘贴client1.crt内容]  
    -----END CERTIFICATE-----  
    </cert>  
    <key>  
    -----BEGIN PRIVATE KEY-----  
    [此处粘贴client1.key内容]  
    -----END PRIVATE KEY-----  
    </key>  

客户端连接

client1.ovpn文件导入OpenVPN客户端(如Windows的OpenVPN GUI、Android/iOS的OpenVPN Connect APP),启动连接即可获得VPN访问权限。

相关问答FAQs

Q1: 如何限制VPN客户端只能访问特定资源?
A1: 可通过修改server.conf中的push指令实现,若只允许客户端访问公司内网192.168.1.0/24网段,可添加以下配置:

route 192.168.1.0 255.255.255.0  
push "route 192.168.1.0 255.255.255.0"  

同时确保服务器已配置正确的路由转发规则,并在防火墙中允许相关流量。

Q2: VPN连接频繁断开如何排查?
A2: 首先检查服务器日志(sudo journalctl -u openvpn@server -f),查看是否有证书错误、端口冲突或网络问题;其次确认客户端网络稳定性,尝试更换DNS或协议(如TCP改为UDP);最后检查防火墙规则,确保VPN端口及数据转发未被阻止,若问题持续,可尝试调整keepalive参数(如将10 120改为5 30)缩短保活检测间隔。

分享:
扫描分享到社交APP
上一篇
下一篇