收起左侧

基于alpine构建openvpn客户端容器镜像供fnos使用

0
回复
142
查看
[ 复制链接 ]

3

主题

2

回帖

0

牛值

江湖小虾

2025-9-24 20:40:49 显示全部楼层 阅读模式

飞牛nas注意事项

关闭ipv6
修改ipv4 dns为8.8.8.8

entrypoint.sh

** **是#!/bin/sh而不是#!/bin/bash,alpine默认没有安**ash

mkdir -p /data/openvpn-client
tee /data/openvpn-client/entrypoint.sh > /dev/null << 'EOF'
#!/bin/sh
​
# 检查配置文件是否存在
if [ ! -f "/etc/openvpn/client/config.ovpn" ]; then
    echo "Error: config.ovpn not found in /etc/openvpn/client/"
    exit 1
fi
​
# 启动VPN连接
echo "Starting OpenVPN client..."
exec openvpn --config /etc/openvpn/client/config.ovpn
EOF
​
# 设置执行权限
chmod +x /data/openvpn-client/entrypoint.sh

Dockerfile

tee /data/openvpn-client/Dockerfile > /dev/null << 'EOF'
FROM alpine:latest
​
# 安装必要组件
RUN apk update && \
    apk add --no-cache \
        openvpn \
        iproute2
​
# 创建配置目录
RUN mkdir -p /etc/openvpn/client
​
# 复制启动脚本
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
​
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
EOF

标准配置文件结构

/data/openvpn-client/
**── Dockerfile
**── config.ovpn
**── entrypoint.sh

构建与运行

构建镜像:
cd /data/openvpn-client
docker build -t openvpn-client .
构建失败处理
# 手动删除临时文件
cd /data/openvpn-client
rm -rf tmp/ *.tmp
#  构建失败时,清理所有 Docker 构建缓存(最彻底)
docker builder prune --all --force
# 清理所有未使用的容器、镜像、网络和卷(慎用!会删除未被任何容器引用的资源)
docker system prune --all --volumes --force
备份恢复镜像
# 备份镜像
cd /data/openvpn-client
docker save -o openvpn-client.tar openvpn-client
# 恢复镜像
cd /data/openvpn-client
docker load -i openvpn-client.tar
运行容器

将客户端的用户配置文件重命名为config.ovpn,保存在/data/openvpn-client/目录

docker stop openvpn-client
docker rm openvpn-client
​
​
mkdir -p /data/openvpn-client
cp /root/nas.ovpn /data/openvpn-client/config.ovpn
# 将客户端的用户配置文件重命名为config.ovpn,保存在/data/openvpn-client/目录
​
docker run -d \
  --name openvpn-client \
  --restart=always \
  --cap-add=NET_ADMIN \
  --device=/dev/net/tun \
  --network=host \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/timezone:/etc/timezone:ro \
  -v /data/openvpn-client/config.ovpn:/etc/openvpn/client/config.ovpn \
  openvpn-client
  
# 检查连接状态
ip addr show
​
# 测试
curl -I https://www.google.com
​
# 进入容器
docker exec -it openvpn-client /bin/sh

关键特性

  1. 纯挂载配置:所有配置通过卷挂载实现
  2. 日志输出:直接输出到stdout方便查看

此方案完全通过文件挂载实现配置,无需重建镜像即可变更所有连接参数。

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则