PS:本文章用于帮助组建自己内网或者公司组网操作,该教程不涉及翻墙操作.

摘抄自https://github.com/hwdsl2/openvpn-install/blob/master/README-zh.md并附上实践

本文在wireguard解决方案前提下搭建,相比wireguard搭建后的效果.主机的网卡能连通的多段网络不会受到影响(主机可以连1和3段,wireguard服务器可以连1和11段和3段但是搭建后主机只能连1和11段),并且可以设置tcp连接(不会受到异地组网的运营商qos影响)

功能特性

  • 全自动的 OpenVPN 服务器配置,无需用户输入

  • 支持使用自定义选项进行交互式安装

  • 生成 VPN 配置文件以自动配置 Windows, macOS, iOS 和 Android 设备

  • 支持管理 OpenVPN 用户和证书

  • 优化 sysctl 设置以提高 VPN 性能

安装说明

首先在你的 Linux 服务器* 上下载脚本:

wget -O openvpn.sh https://get.vpnsetup.net/ovpn

选项 1: 使用默认选项自动安装 OpenVPN。(默认是UDP方式连接,我们用选项2的安装方式设置TCP连接)

sudo bash openvpn.sh --auto

查看脚本的示例输出(终端记录)。

对于有外部防火墙的服务器(比如 EC2/GCE),请为 VPN 打开 UDP 端口 1194。

选项 2: 使用自定义选项进行交互式安装。

sudo bash openvpn.sh

你可以自定义以下选项:VPN 服务器的域名,协议 (TCP/UDP) 和端口,VPN 客户端的 DNS 服务器以及第一个客户端的名称。

对于有外部防火墙的服务器,请为 VPN 打开所选的 TCP 或 UDP 端口。

我们直接执行以下命令:

systemctl stop firewalld
systemctl disable firewalld
yum install -y iptables-services
systemctl enable iptables
systemctl start iptables
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
service iptables save
service iptables restart
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

下一步

安装完成后,你可以再次运行脚本来管理用户或者卸载 OpenVPN。

配置你的计算机或其它设备使用 VPN。请参见:

配置 OpenVPN 客户端

配置OpenVPN客户端

OpenVPN 客户端 在 Windows, macOS, iOS, Android 和 Linux 上可用。macOS 用户也可以使用 Tunnelblick

要添加 VPN 连接,首先将生成的 .ovpn 文件安全地传送到你的设备,然后打开 OpenVPN 应用程序并导入 VPN 配置文件。

生成的客户端文件在截图内的地方,下载下来; 注意修改.ovpn文件内的ip为内网ip或者穿透出去的外网ip端口(编辑器打开即可)

或者可以编辑/etc/openvpn/server/client-common.txt文件的ip,后面创建客户端自动为这个ip地址

然后重启openvpn

systemctl restart openvpn@server

如果碰到报错:

[root@vpn ~]# systemctl restart openvpn@server
Job for openvpn@server.service failed because the control process exited with error code. See "systemctl status openvpn@server.service" and "journalctl -xe" for details.

是因为启动的目录错误所以编辑:/usr/lib/systemd/system/openvpn@.service

vi /usr/lib/systemd/system/openvpn@.service
将里面的--cd值后面增加/server

重载后重新执行

systemctl daemon-reload
systemctl restart openvpn@server

要管理 OpenVPN 客户端(增删),请再次运行安装脚本:sudo bash openvpn.sh

客户端下载下来后,默认会注册.ovpn文件,可以直接双击.ovpn文件导入,然后连接
修改客户端配置不全局走openvpn仅指定ip段走:

route-nopull #不添加路由, 也就是不会有任何网络请求走OpenVPN 
route 192.168.11.0 255.255.255.0 vpn_gateway #指定此網段才走VPN代理
route 192.168.1.0 255.255.255.0 vpn_gateway #指定此網段才走VPN代理
route 192.168.3.0 255.255.255.0 vpn_gateway #指定此網段才走VPN代理
#max-routes 参数表示可以添加路由的条数
max-routes 1000

简易web管理

web管理出处https://linux.xiazhengxin.name/index.php?entry=%E6%90%AD%E5%BB%BA%E5%B8%A6WEB%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86%E7%9A%84openvpn


如果是个人使用的话,到这里就结束了。缺点是添加、删除用户需要反复的执行该脚本,有点麻烦。

2.编辑 /lib/systemd/system/openvpn-server@.service 服务文件,在执行命令后面追加 --management 127.0.0.1 8989 开启管理端口。
如下:


[Unit]
Description=OpenVPN service for %I
After=network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO
<p>[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/server
ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log --status-version 2 --suppress-timestamps --config %i.conf --management 127.0.0.1 8989
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
RestartSec=5s
Restart=on-failure</p>
<p>[Install]
WantedBy=multi-user.target



3.重载服务列表,重启openvpn服务,使配置生效。并查看端口情况。


root@ip:~# systemctl daemon-reload
root@ip:~# systemctl restart openvpn-server@server.service
root@ip:~# netstat -nlp | grep openvpn
tcp        0      0 172.31.35.111:12345     0.0.0.0:*               LISTEN      19285/openvpn<br />
tcp        0      0 127.0.0.1:8989          0.0.0.0:*               LISTEN      19285/openvpn     



4.确认管理端口开启后,下载ovpn-admin 用户管理服务,解压便可得到可执行的二进制文件。


root@ip:~# wget https://github.com/sharljimhtsin/ovpn-admin/releases/download/v3/ovpn-admin-linux-amd64.tar.gz



5.复制easyrsa 可执行文件 到 $PATH 目录下,ovpn-admin 需要用到。


root@ip:~# cp /etc/openvpn/server/easy-rsa/easyrsa /usr/local/bin/
root@ip:~# ls -lh /usr/local/bin/
total 172K
-rwxr-xr-x 1 root root 170K Jul 14 02:45 easyrsa



6.启动ovpn-admin.命令如下:


root@ip:~# EASYRSA_BATCH=1 ./ovpn-admin --listen.host="0.0.0.0" --listen.port="8080" --ovpn.network="TUN网卡IP/24" --ovpn.server=WANIP:12345:tcp --easyrsa.path=/etc/openvpn/server/easy-rsa/ --easyrsa.index-path=/etc/openvpn/server/easy-rsa/pki/index.txt --log.level=trace
--web.basic-auth.user=admin --web.basic-auth.password=12345
DEBU[0000] mgmtStatusTimeFormat: 2006-01-02 15:04:05<br />
DEBU[0000] mgmtSetTimeFormat: successful connection to main/127.0.0.1:8989
TRAC[0000] OpenVPN Version: OpenVPN 2.5.1 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2021
Management Version: 3
ND
INFO[0000] Bind: http://0.0.0.0:8080 



比较关键的参数就是 --web.basic-auth.user=admin --web.basic-auth.password=12345 这2个是用于webui 管理的登录认证。
由于该进程需要常驻,我是用的是 screen,也可以用 nohup 之类的。或者使用 https://mysystemd.talos.sh/ 生成一个 systemd 服务。

7.检查服务端口情况。


root@ip:~# netstat -nlp | grep vpn
tcp        0      0 172.31.35.111:12345     0.0.0.0:*               LISTEN      19285/openvpn<br />
tcp        0      0 127.0.0.1:8989          0.0.0.0:*               LISTEN      19285/openvpn<br />
tcp6       0      0 :::8080                 :::*                    LISTEN      19300/./ovpn-admin  



8.确认一切OK后,就可以使用 http://wanip:8080 + 之前配置的用户名密码 访问openvpn 的用户管理后台了。