我正在 Kubernetes/GKE 上运行一个应用程序。
我有很多没有公共IP的设备。我需要从应用程序访问这些设备的 SSH 和 VNC。
最初的想法是在集群内运行 OpenVPN 服务器并连接设备,但后来遇到了问题:
似乎没有任何优雅/惯用的方式将流量从应用程序路由到 VPN 客户端。
基本上,我所需要的就是能够告诉route 10.8.0.0/24 via vpn-pod
我发现的可能的解决方案:
修改节点上的路由。我想让节点保持短暂状态,并且仅将所有内容都放在 K8s 清单中。
DaemonSet
在具有 K8s 清单的节点上添加路由。然而,目前尚不清楚如何跟踪 OpenVPN pod IP 的变化。
伊斯蒂奥。似乎有点矫枉过正,我无法在文档中找到问题的解决方案。L3路由好像不支持,所以必须涉及到端口映射。
印花布。它在 GKE 上得到原生支持,并且确实支持 L3 路由,但我想避免对本来可以通过单个自定义路由解决的问题引入如此深远的更改。
OpenVPN 客户端边车。工作起来会非常优雅,只要允许客户端相互通信,VPN 服务器的托管位置和方式并不重要。但是,我想隔离客户端,并且可能需要从不同的 pod 访问客户端,这意味着必须将 sidecar 放置在多个位置,从而污染部署。可以通过将客户端分为不同 IP 范围的类别来实现隔离。
GCP / GKE 本身内的路由。它们只允许指定一个节点作为下一跳。这也意味着应用程序和 VPN 服务器都必须在 GCP 内运行。
我目前倾向于在简单的虚拟机上运行 OpenVPN 服务器并使用 GCP 路由。它可以工作,我可以从 K8s 应用程序 ping VPN 客户端,但它看起来仍然脆弱且硬连线。
然而,只有 sidecar 解决方案提供了一种完全分离关注点的方法。
是否有一种惯用的解决方案可以从其他 Pod 访问 Pod 专用网络?
networking routes openvpn kubernetes google-kubernetes-engine
我一直在尝试将我的种子盒移动到Docker容器中,我认为我遇到了鸡/蛋问题:
当前的种子箱设置通过privateinternetaccess.com运行OpenVPN(所有互联网都通过VPN).我有一个脚本(https://github.com/firecat53/pia_transmission_monitor),用PIA检查分配的转发端口,然后使用端口和绑定地址相应地更新传输守护进程.
问题是每小时检查分配的转发端口,它可以随时更改...我需要在运行Docker容器之前知道端口,以便知道哪些端口要传入/传出容器.我打算在容器内运行OpenVPN,但事先不知道分配给容器的端口我不确定这是否会起作用.
一个非常 hackish的解决方案可能是在一个容器内运行OpenVPN和另一个Docker守护进程,然后在OpenVPN容器内运行传输容器.这似乎很复杂,但我还没有尝试过.
我错过了一些非常明显的东西吗?还有其他想法吗?
谢谢!
斯科特
是否可以通过 Chrome 扩展 API 以编程方式连接 openVPN?我在 Chrome 扩展 API 文档中找到的所有内容都是chrome.proxy
和chrome.socket
。
我相信可以使用运行外部程序,NPAPI
并且该外部程序将创建必要的 openVPN 连接。
UPD: OpenVPN似乎有TCP/Socket管理接口(参见http://openvpn.net/index.php/open-source/documentation/miscellaneous/79-management-interface.html),所以连接起来相当容易以编程方式从 Chrome 扩展程序中获取。
我在Mac上运行Tunnelblick.
我的本地网络是192.168.0.0/32,我尝试连接的网络是192.168.252.0/22.
此外,我正在使用运行Windows 8.1的VM(Parallels).
我想从我的Mac连接到VPN并与我的VM共享此网络.
所以,我面临着一些问题.他们去了:
如果我不够清楚,我很抱歉.所有这些问题都有点复杂.
重要的事情:当我使用Windows机器时,我正在使用的相同配置文件完美运行(没有IP和DNS问题).
我有 NodeJS 应用程序并想开始在其中使用 OpenVPN 连接。为此,我在 npm 上找到了 2 个模块(openvpn-client 和 openvpn-bin)——但它们中的任何一个都没有好的文档和示例,但我尽可能地使用它们,但没有成功。
我有带有 540 个 .opvn 文件的 Ipvanish 帐户(登录名/密码),我可以使用它。我试试这个:
var openvpnmanager = require('node-openvpn');
var openvpnBin = require('openvpn-bin');
var path = require('path');
var filePath = path.normalize('../geo/ipvanish/ipvanish-AU-Sydney-syd-a16.ovpn');
var opts = {
host: 'syd-a16.ipvanish.com', // normally '127.0.0.1', will default to if undefined
port: 443, //port openvpn management console
timeout: 60000, //timeout for connection - optional, will default to 1500ms if undefined
config: filePath
};
var auth = {
user: 'email@gmail.com',
pass: 'password'
};
var …
Run Code Online (Sandbox Code Playgroud) 之前已经提出了类似的问题,但由于配置脚本的标志已更改,因此答案似乎不再适用.我试图在x86和x64上从Ubuntu 14.04.5上的git源编译OpenVPN.我已经在/ usr/local/ssl中构建并安装了OpenSSL 1.0.1t.我已经尝试了配置选项的各种组合,编译器似乎认识到了
./configure OPENSSL_LIBS="-L/usr/local/ssl/ -lssl -lcrypto" OPENSSL_CFLAGS="-I/usr/local/ssl/include/"
Run Code Online (Sandbox Code Playgroud)
完成没有错误,但./configure OPENSSL_LIBS="-L/usr/local/ssl/" OPENSSL_CFLAGS="-I/usr/local/ssl/include/"
结果configure: error: openssl check failed
.一旦你做了make并进行安装,它仍然会报告OpenSSL的系统版本:
root@anonymous:/usr/local/src/openvpn# openvpn --version
OpenVPN 2.3_git [git:master/d1bd37fd508ee046] x86_64-unknown-linux-gnu [SSL (OpenSSL)]
[LZO] [LZ4] [EPOLL] [MH] [IPv6] built on Aug 16 2016
library versions: OpenSSL 1.0.1f 6 Jan 2014, LZO 2.06
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
Compile time defines: enable_async_push=no enable_comp_stub=no enable_crypto=yes
enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dlopen=unknown
enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes
enable_fragment=yes enable_iproute2=no enable_libtool_lock=yes enable_lz4=yes
enable_lzo=yes enable_management=yes enable_multi=yes …
Run Code Online (Sandbox Code Playgroud) 我最近在AWS EC2实例上设置了OpenVPN服务器,以便将我的办公室连接到AWS VPC环境.
我使用TunnelBlick作为VPN客户端,一切都很好!我可以ssh到VPC中的私有IP.但是,从我的办公室主机解析DNS VPC名称(如果我从VPC中的EC2实例运行它,我就可以).
我目前的解决方案是在EC2实例上使用Unbound设置DNS转发器(这恰好是我运行OpenVPN服务器的实例) - 但由于某种原因它不起作用.一旦连接到VPN服务器以便能够解析VPC中的私有主机名,您将如何启用VPN客户端?
我很失落,所以如果你有任何其他的想法,或者可以根据我目前的设置弄清楚什么是错的,我会永远感激:)
OpenVPN服务器配置
port 1194 #- change the port you want
proto udp #- protocol can be tcp or udp
dev tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh2048.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "dhcp-option DNS <PUBLIC_IP_OF_THE_SERVER_RUNNING_OPENVPN_AND_UNBOUND>"
keepalive 5 30
comp-lzo
persist-key
persist-tun
status server-tcp.log
verb 3
Run Code Online (Sandbox Code Playgroud)
未绑定的服务器配置
172.31.0.2是VPC DNS服务器
server:
interface: 0.0.0.0
access-control: 0.0.0.0/0 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个 Docker 映像,它将通过 VPN 转发端口。我创建了一个公开端口 5144 的简单图像,并测试了它是否正常工作:
sudo docker run -t -d -p 5144:5144 \
--name le-bridge \
--cap-add=NET_ADMIN \
--device=/dev/net/tun \
bridge
sudo docker exec -it le-bridge /bin/bash
Run Code Online (Sandbox Code Playgroud)
我检查端口是否正确暴露,如下所示:
[CONTAINER] root@6116787b1c1e:~# nc -lvvp 5144
[HOST] user$ nc -vv 127.0.0.1 5144
Run Code Online (Sandbox Code Playgroud)
然后,我输入的任何内容都会在容器的终端中正确回显。但是,一旦我启动 openvpn 守护进程,这就不再起作用:
[CONTAINER] root@6116787b1c1e:~# openvpn logger.ovpn &
[1] 33
Sun Apr 5 22:52:54 2020 OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2019
Sun Apr 5 22:52:54 2020 library versions: OpenSSL …
Run Code Online (Sandbox Code Playgroud) 我正在研究如何使 OpenVPN 客户端在 Pod 的容器上工作,我解释了我所做的事情,但是您可以跳过我的所有解释并直接提供您的解决方案,如果可行的话,我不在乎将以下所有内容替换为您的步骤,我想让我的容器以外部和内部网络都可以工作的方式使用 VPN(例如 ExpressVPN)。
我有一个作为 OpenVPN 客户端的 docker 镜像,它可以与以下命令配合使用:
docker run --rm -it --cap-add=NET_ADMIN --device=/dev/net/tun my-app /bin/bash
Run Code Online (Sandbox Code Playgroud)
docker 镜像有一个入口点 bash 脚本:
curl https://vpnvendor/configurations.zip -o /app/configurations.zip
mkdir -p /app/open_vpn/ip_vanish/config
unzip /app/configurations.zip -d /app/open_vpn/config
printf "username\npassword\n" > /app/open_vpn/vpn-auth.conf
cd /app/open_vpn/config
openvpn --config ./config.ovpn --auth-user-pass /app/open_vpn/vpn-auth.conf
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是当我将它部署为 K8S Pod 中的容器时,它崩溃了,这是可以理解的,K8S 集群需要节点之间的内部网络通信,因此 VPN 破坏了它......我该如何让它工作?谷歌搜索很令人沮丧,没有一个解决方案有效,而且只有几个,有一个有类似的问题:OpenVPN-Client Pod on K8s - Local network unreachable 但不太明白,请帮忙。
由于 IPVanish 众所周知,让我们以他们的 ovpn 为例,我使用其他供应商,但可以访问 IPVanish 帐户,但它也不起作用:
client
dev tun
proto udp
remote lon-a52.ipvanish.com 443
resolv-retry infinite
nobind …
Run Code Online (Sandbox Code Playgroud) 目前我正在使用 openvpn3 客户端连接到 vpn 服务器
openvpn3 session-start --config /home/user/client.ovpn
Run Code Online (Sandbox Code Playgroud)
然后它要求输入用户名和密码。
有没有简单的方法来传递用户名和密码。因为每次都要输入用户名和密码很烦人
openvpn ×10
networking ×3
docker ×2
kubernetes ×2
vpn ×2
aws-vpc ×1
c ×1
compilation ×1
dns ×1
javascript ×1
linux ×1
node.js ×1
openssl ×1
parallels ×1
routes ×1
transmission ×1