Linux中安装OpenVPN客户端并连接


1.安装客户端

1.1 首先安装OpenVPN(Almalinux系统)

如果用docker运行Linux,请看下边docker部分

1
2
dnf install epel-release -y
dnf install openvpn -y

1.2 将服务器端导出.ovpn文件发送到客户端机器

1.3 连接服务器

1
2
3
4

sudo openvpn --config /path/client.ovpn
# 连接不成功的时候,可以追加--verb 6来增加命令,输出详细的log。
# openvpn --config /path/client.ovpn --verb 6

2. docker中的Linux连接OpenVPN出现的问题

2.1 docker需要追加的参数

  • -network host: 网路是host
  • -cap-add=NET_ADMIN: host的网络变更权限附加
    • 不附加此权限会出这个错误: ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)
  • -device=/dev/net/tun: 需要追加tun网络。ubuntu系统默认没有这个设备
    • 不设置的话会报这个错误: ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
      • SELinux: :zOption, mount的level调整
        • -volume "/hostpath/conf":/etc/openvpn/conf:z
        • CentOS8 Podman的-mount也可以
        • -mount >type=bind,src="/hostpath/conf",dst=/etc/openvpn/conf,relabel=shared

2.2 docker run例子

1
2
3
4
5
docker run --name $containerName \
--network host \
--cap-add=NET_ADMIN --device=/dev/net/tun \
--volume "/hostpath/conf":/etc/openvpn/conf:ro \
$imageName

2.3 如果是群晖,执行docker run不太容易

用群晖的docker 运行openvpen客户端需要一下几步。这里是用ubuntu举例。

  1. 执行Docker的时候,在功能设定里,勾选NET_ADMIN。
  2. 和上面安装openvpn方法一样,在包管理器里安装openvpn。
  3. 因为没找到设定加参数的地方,所以启动docker后手动安装tun
1
2
3
4
5
6
7
8
#!/bin/bash

mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun

/etc/init.d/openvpn restart

以上的步骤,在docker容器重启后,会不生效,所以可以将上面的脚本做一个sh脚本。然后在启动任务里添加。

1
crontab -e

然后添加下面定时任务

1
@reboot /path/to/where/you/saved/the/script

Author: ofoo.top
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source ofoo.top !
  TOC