有没有办法通过命令行获取正在运行的 OpenVPN 客户端通过隧道连接到的远程 VPN 网关的 IP 地址?
更详细:假设 OpenVPN 连接到远程服务器,通过带有选项的命令行启动--remote
,或者通过指定给出“remote”的 .opvn 文件启动,或者由 Ubuntu 中的网络管理器启动。如何通过命令行获取远程VPN服务器的IP地址?
在某些情况下可以工作的黑客是运行ps aux | grep openvpn
然后正则表达式匹配--remote
命令行参数,但我想要更可靠的东西。
(这可能是重复的可靠获取OpenVPN隧道服务器IP,但是这个问题还没有收到任何活动,我不能 100% 确定那里的意图是一样的。)
背景:我本身对这个问题很感兴趣,但这里有一些动机;也欢迎提供其他解决此问题的方法的建议。我想通过 阻止iptables
任何不通过 VPN 隧道的流量。为此,我使用,作为其他规则的一部分,
iptables -I OUTPUT 1 -d $serverip -j ACCEPT
似乎这需要是服务器的外部IP,而不是服务器的本地IP(10.xx1或其他)。
答案1
如果只是查看 .ovpn 文件内部不是一个选项,我可能会编写一个小 lua 脚本来解析 .ovpn 文件并解析 dns 并运行使用该地址运行所需的任何 iptables 命令。你不需要在 lua 中这样做,你可以使用任何你喜欢的脚本语言。
至于开箱即用的命令行工具,我没有想到。你有点回答了你自己的问题,尽管这只给了我命令行参数,对于我所有的VPN客户端来说,这些参数只是openvpn xxxx.ovpn,所以它甚至无法在我的系统上工作。
旁注:如果您确实希望任何 openvpn 客户端都能可靠地使用此功能,您还可以在 .ovpn 文件内指定一个代理服务器,并使用 Nodejs 之类的东西自己实现一个快速代理服务器(Openvpn 确实支持 TCP 的 HTTP/1.0 CONNECT 代理和 UDP 的 SOCKS5) SOCKS5 很难快速实现,尤其是 UDP 部分)。一旦 openvpn 连接,您就可以可靠地获得 IP 地址,并且您可以在打开远程主机的套接字之前运行 iptables 命令。
顺便说一句,我遇到了一个非常相似的问题,我最终购买了一个充当路由器的物联网设备,尽管我不能推荐我得到的那个(Banana Pi BPI R1),但它现在可以工作并完成其工作,这是一种痛苦设置它可能有更好的替代该设备。
我使用的“技巧”是在物联网路由器上,我阻止所有转发,除非它有 vpn tun tap 设备作为输入或输出。这是可行的,因为 vpn 客户端本身仅受输出/输入链的影响,完全规避了该问题。
这样做的另一个优点是,付费 VPN 提供商不知道我在任何给定时间使用了多少台设备(我的设备限制为 3 台)。 VPN 提供商看到的只是我的物联网路由器有大量流量并且 24/7 处于连接状态。