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举例。
执行Docker的时候,在功能设定里,勾选NET_ADMIN。
和上面安装openvpn方法一样,在包管理器里安装openvpn。
因为没找到设定加参数的地方,所以启动docker后手动安装tun
1 2 3 4 5 6 7 8 #!/bin/bash mkdir -p /dev/netmknod /dev/net/tun c 10 200chmod 600 /dev/net/tun/etc/init.d/openvpn restart
以上的步骤,在docker容器重启后,会不生效,所以可以将上面的脚本做一个sh脚本。然后在启动任务里添加。
然后添加下面定时任务
1 @reboot /path/to/where/you/saved/the/script