Loading... # OpenVPN for Docker on ARM (RaspberryPi) 这是[kylemanna/docker-openvpn](https://github.com/kylemanna/docker-openvpn)的一个分支,它不专注于ARM。 [](https://hub.docker.com/r/giggio/openvpn-arm/) [](https://hub.docker.com/r/giggio/openvpn-arm/) OpenVPN server in a Docker container complete with an EasyRSA PKI CA. Extensively tested on [Digital Ocean $5/mo node](http://bit.ly/1C7cKr3) and has a corresponding [Digital Ocean Community Tutorial](http://bit.ly/1AGUZkq). #### Upstream Links * Docker Registry @ [giggio/openvpn-arm](https://hub.docker.com/r/giggio/openvpn-arm/) * GitHub @ [giggio/docker-openvpn-arm](https://github.com/giggio/docker-openvpn-arm) ## 快速入门 * 为数据卷容器选择一个名称,它将自动创建。`$OVPN_DATA` ``` OVPN_DATA="ovpn-data" ``` * 初始化将保存配置文件和证书的容器`$OVPN_DATA` ``` docker volume create --name $OVPN_DATA docker run -v $OVPN_DATA:/etc/openvpn --rm giggio/openvpn-arm ovpn_genconfig -u udp://VPN.SERVERNAME.COM docker run -v $OVPN_DATA:/etc/openvpn --rm -it giggio/openvpn-arm ovpn_initpki nopass ``` * 启动OpenVPN服务器进程 ``` docker run -v $OVPN_DATA:/etc/openvpn -d --name openvpn -p 1194:1194/udp --cap-add=NET_ADMIN giggio/openvpn-arm ``` * 生成不带密码的客户端证书 ``` docker run -v $OVPN_DATA:/etc/openvpn --rm -it giggio/openvpn-arm easyrsa build-client-full CLIENTNAME nopass ``` * 使用嵌入式证书检索客户端配置 ``` docker run -v $OVPN_DATA:/etc/openvpn --rm giggio/openvpn-arm ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn ``` ## 调试提示 * 创建一个名称为 DEBUG 且值为 1 的环境变量以启用调试输出(使用 “docker -e”)。 ``` docker run -v $OVPN_DATA:/etc/openvpn -p 1194:1194/udp --privileged -e DEBUG=1 giggio/openvpn-arm ``` * 使用正确安装了 openvpn 的客户端进行测试 ``` $ openvpn --config CLIENTNAME.ovpn ``` * 如果事情不起作用,请在客户端上运行一连串的调试检查 ``` $ ping 8.8.8.8 # checks connectivity without touching name resolution $ dig google.com # won't use the search directives in resolv.conf $ nslookup google.com # will use search ``` ## 它是如何工作的? 使用带有包含脚本的映像初始化卷容器以自动生成:`giggio/openvpn-arm` * 迪菲-赫尔曼参数 * 私钥 * 与OpenVPN服务器的私钥匹配的自证书 * 一个 EasyRSA CA 密钥和证书 * 来自 HMAC 安全性的 TLS 身份验证密钥 OpenVPN服务器以默认运行cmd启动`ovpn_run` 配置位于 中,并且 Dockerfile 将该目录声明为卷。这意味着您可以使用参数启动另一个容器,并访问配置。该卷还保存 PKI 密钥和证书,以便可以对其进行备份。`/etc/openvpn``-v` 要生成客户端证书,请通过容器路径中的命令使用 EasyRSA。环境变量将 PKI CA 置于其下。`giggio/openvpn-arm``easyrsa``EASYRSA_*``/etc/openvpn/pki` 方便的是,带有一个调用的脚本,该脚本转储内联OpenVPN客户端配置文件。然后可以将此单个文件提供给客户端以访问VPN。`giggio/openvpn-arm``ovpn_getclient` 要为客户端(也称为 OTP)启用双因素身份验证,请参阅[此文档](https://hub.docker.com/docs/otp.md)。 ## OpenVPN详细信息 我们使用mode,因为它适用于最广泛的设备.例如,mode不适用于Android,除非设备已植根。`tun``tap` 使用的拓扑是,因为它适用于最广泛的操作系统,例如,不适用于Windows。`net30``p2p` 默认情况下,UDP 服务器用于动态客户端。`192.168.255.0/24` 客户端配置文件指定,这意味着在建立 VPN 连接后,所有流量都将通过 VPN。如果您使用无法直接访问的本地 DNS 解析器,这可能会导致问题,因为您将尝试通过 VPN 访问它们,而它们可能不会回答您。如果发生这种情况,请使用公共 DNS 解析器,如Google(8.8.4.4和8.8.8.8)或OpenDNS(208.67.222.222和208.67.220.220)。`redirect-gateway def1` ## 安全讨论 Docker 容器运行自己的 EasyRSA PKI 证书颁发机构。这被选为在安全性和便利性方面妥协的好方法。容器在假设OpenVPN容器在安全主机上运行的情况下运行,也就是说,对手无法访问下面的PKI文件。这是一个相当合理的折衷方案,因为如果对手可以访问这些文件,则对手可以操纵 OpenVPN服务器本身的功能(嗅探数据包,创建新的PKI CA,MITM数据包等)。`/etc/openvpn/pki` * 为简单起见,证书颁发机构密钥默认保存在容器中。强烈建议使用一些密码来保护 CA 密钥,以防止文件系统受损。更安全的系统会将 EasyRSA PKI CA 放在离线系统上(可以使用相同的 Docker 映像和脚本[`ovpn_copy_server_files`](https://hub.docker.com/docs/paranoid.md)来完成此操作)。 * 如果对手对文件系统具有 root 访问权限,则攻击者不可能在不首先破解密钥传递阶段的情况下签署错误或伪造的证书。 * EasyRSA命令将生成密钥并将其保留在服务器上,再次可能破坏和窃取密钥。生成的密钥需要由 CA 签名,用户希望使用上述密码进行配置。`build-client-full` * 假设 Docker 容器文件系统的其余部分是安全的,TLS + PKI 安全性应该防止任何恶意主机使用 VPN。 ## 在 Docker 容器内运行的好处 ### 整个守护程序和依赖项都在 Docker 映像中 这意味着它将在所有发行版Linux发行版上正常运行(在Docker本身设置之后),例如:Ubuntu,Arch,Debian,Fedora等。此外,旧的稳定服务器可以运行前沿的OpenVPN服务器。 无需安装/清理库依赖项(即在 Ubuntu 12.04 LTS 上运行最新的 OpenVPN 和最新的 OpenSSL)。 ### 它不会踩遍服务器的文件系统 Docker容器的所有内容都包含在两个映像中:临时运行时映像(giggio/openvpn-arm)和数据卷。要删除它,请删除相应的容器,数据卷和Docker映像,然后将其完全删除。这也使得运行多个服务器变得更加容易,因为每个服务器都存在于容器的气泡中(当然需要多个IP或单独的端口来与世界通信)。`$OVPN_DATA``$OVPN_DATA` ### 一些(有争议的)安全优势 在最简单的级别上,破坏容器可能会阻止服务器的其他危害。围绕这一点有很多争论,但结论是,这肯定会使摆脱 容器。人们正在积极开发Linux容器,以使这在未来成为一种保证。 ## 与jpetazzo / dockvpn的区别 * 不再使用 serveconfig 通过 https 分发配置 * 集成到映像中的适当 PKI 支持 * OpenVPN 配置文件、PKI 密钥和证书存储在存储卷上,以便跨容器重复使用 * 为 HMAC 安全性添加 tls-auth ## 测试于 * 码头工人主机: * 服务器[一个数字海洋](https://www.digitalocean.com/?refcode=d19f7fe88c94)液滴,运行 Ubuntu 14.04 的 512 MB RAM * 客户 * Android App OpenVPN Connect 1.1.14 (build 56) * OpenVPN 核心 3.0 安卓 armv7a thumb2 32 位 * OS X Mavericks with Tunnelblick 3.4beta26 (build 3828) using openvpn-2.3.4 * ArchLinux OpenVPN pkg 2.3.4-1 * 视窗开放VPN 2.3.13.20161120 ## 启用 Selinux 时遇到权限问题? 看到[这里](https://hub.docker.com/r/giggio/docs/selinux.md) 最后修改:2022 年 11 月 02 日 05 : 45 PM © 转载自他站 赞赏 要多恰饭才能长胖 赞赏作者 支付宝微信