docker - docker vpn gateway 无需修改 ip 表
问题描述
我目前正在雇用一个 VPS 来托管我的网站和其他一些东西。一切都整齐地在码头运行(从上周开始)。我希望 VPS 做的一件事是使用 prometheus 监控我的家庭自动化内容,但我预计还会有更多脚本在那里运行以用于我的家庭自动化。由于我不想打开所有类型的端口,因此我想到了以下解决方案:
我有一个在家里运行的 openvpn 服务器,所以我想要一个连接到这个 VPN 的 docker 容器,并允许其 docker 网络中的任何其他容器完全访问我的家庭网络。目前这只是一个普罗米修斯容器。我设法设置了一个连接到我家的 VPN 客户端,我可以通过 docker exec 命令 ping 我的本地设备。然而,问题是将 prometheus 连接到 VPN 作为其他 docker 网络。我试过的是:
- 在 prometheus 和 openvpn docker 之间设置一个简单的 docker 网络(桥接模式),不幸的是,prometheus 无法访问我的本地设备。毫不奇怪,如果我将笔记本电脑连接到 VPN,我网络上的其他设备也不在 VPN 上。
- 给 openvpn 容器 network_mode: host,这个我不想再试一次。整个 VPS 不再可访问,我必须通过主机(我雇用 VPS 的公司)后端连接以关闭 openvpn 容器。
- 给 prometheus 容器 network_mode: container:openvpn ,这允许 prometheus 连接到我的本地设备,但是这种网络模式的“限制”是 prometheus 容器不能再连接到其他 docker 网络(或具有主机名),因此grafana 不可见。
- 搞乱 docker 网络 ipam 子网和网关,但这会导致 openvpn 连接失败。
我认为现在很清楚我是 docker 新手。这就是为什么我使用 portainer 并在其中弄乱 docker compose 文件的原因。另外,我对 Linux 还不是很满意。所以我不想弄乱我的主机(VPS 服务器,而不是公司)。我读了一些关于修改主机 IP 表的内容,但这让我有点害怕。
在我的理想世界中,我可以使用 docker compose 设置来启动和运行它,但我认为没有。在下面你可以找到我的 openvpn docker-compose,prometheus 在另一个堆栈上,但它目前只是连接到“vpn”和“grafana_backend”网络(不起作用)。
services:
openvpn:
container_name: openvpn
hostname: openvpn
image: adito/openvpn-client
restart: always
volumes:
- /root/openvpn/kingtechvps.ovpn:/opt/openvpn/openvpn-config.ovpn:ro
cap_add:
- NET_ADMIN
command: openvpn --config /opt/openvpn/openvpn-config.ovpn
devices:
- /dev/net/tun
networks:
- vpn
#ports:
# - 545:80
# vpn:
# ipv4_address: 172.10.54.2
#dns: ${HOST_IP_ADDRESS} # We use unbound listening on the host interface, leading to dnscrypt
networks:
vpn:
driver: bridge
external: true
name: vpn
#ipam:
# driver: default
# config:
# - subnet: 172.10.54.0/16
# gateway: 172.10.54.2
谁能帮我启动并运行它?
解决方案
推荐阅读
- c - C中没有库的字符串连接
- sql - 树结构和 SQL - 寻找设计建议
- java - 在java中使用switch语句为范围创建一个标记
- azure - Azure 事件中心与 Kafka 作为服务代理
- html - 如何匹配源文件中的bash特定哈希并替换为目标文件中的匹配?
- riscv - 在 gem5 RISCV FS 模式下运行 Berkley Boot Loader
- java - 将 Redis 设为可选
- nginx - Nginx-clojure Java 处理程序
- python - os.system 在 linux 中给出奇怪的输出
- r - 如何将`lapply`函数应用于一组时间序列数据集