![如何通过 openVPN 隧道转发来自第二台设备的所有流量?](https://linux22.com/image/779230/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20openVPN%20%E9%9A%A7%E9%81%93%E8%BD%AC%E5%8F%91%E6%9D%A5%E8%87%AA%E7%AC%AC%E4%BA%8C%E5%8F%B0%E8%AE%BE%E5%A4%87%E7%9A%84%E6%89%80%E6%9C%89%E6%B5%81%E9%87%8F%EF%BC%9F.png)
我想将一台新机器远程连接到我们公司的网络,以便它可以访问那里的活动目录。
旧机器可以通过 OpenVPN 隧道访问公司网络。
通过隧道连接时,它会根据 DHCP 获取公司内部 IP,名称服务器会被公司内部名称服务器覆盖,并且任何与公司网络相关的 IP 范围都会通过隧道进行路由。
在新机器上,我还没有账户,所以没有办法配置它。我首先需要将它连接到公司网络并输入我的凭据。
两台机器都是 macOS,但我认为这是一个常见的 Linux 问题。
我需要在旧机器上进行什么设置,以便新机器和公司网络认为它在网络中并获得自己的 IP 等?
我可以使用以太网电缆连接两台机器,旧机器具有正常的无线连接,并且 OpenVPN 隧道使用此无线连接。
因此,最大的问题是哪些数据包需要从以太网连接路由到隧道并返回?如果您知道如何在 Mac 上进行设置,那就太好了,但即使了解必须发生什么也会有很大帮助!
如果这能让生活更轻松,在转发时我不需要在第一台机器上使用 OpenVPN 隧道。如果拆分配置导致问题,我可以打开“通过隧道路由所有流量”。
假设(用于命令示例):广告服务器的名称为 xy.company.net,IP 为 1.2.3.4
在评论中澄清:这是一台新的 MacBook,我需要登录一次才能创建/激活我的用户帐户。为此,新的 MacBook 需要访问公司的 AD 服务器。该服务器可能配置了公司内部名称,因此它需要针对公司名称服务器执行 DNS 请求,这意味着它必须首先了解这些服务器,我假设是从 DHCP 了解的。
我还假设我可以为连接到旧 MacBook 以太网端口的所有设备创建虚假服务,但这听起来有点小题大做。
仍然相信可以有某种方式来共享旧 MacBook 的 openVPN 隧道(tun 接口)。基本上,来自以太网卡的所有流量都应转发到公司网络,所有响应都应转发到新 MacBook。
这叫桥还是别的什么?我该用路由命令还是别的什么?我对所有网络都有基本的了解,但没有实际经验。所以欢迎任何帮助!
答案1
更新/备注:根据 Daniel 的评论,由于缺少与“newmachine”的连接,此解决方案对他不起作用ssh
。不过,还是保留它,以防其他人可以使用。
不幸的是,您无法提供太多细节。因此我们需要执行一些基本步骤。
您没有指定操作系统,但我会使用一些标准或 Linux 命令来解释。我假设“oldmachine”和“newmachine”正在运行 Linux 或“兼容”操作系统。
如果广告服务器的名称为 xy.company.net,IP 为 1.2.3.4,您有什么建议?
首先确保在“newmachine”上,tcp 端口 80 或 443 上没有任何运行(应该适用于 Linux 和 BSD):
newmachine$ netstat -lnt|grep ^tcp|awk '{print$4}' |sed 's,.*[.:],,'|sort -u|egrep '^80$|^443$'
newmachine$
如果没有80
或443
写着,则没问题。否则,您需要终止在该端口上运行的进程。
然后在“newmachine”上启动一个 shell 会话,连接ssh
到“oldmachine”并保持打开状态:
newmachine# ssh -L 80:1.2.3.4:80 -L 443:1.2.3.4:443 youraccount@oldmachine
oldmachine$
这两个-L
选项创建了两个ssh
隧道。
-L 80:1.2.3.4:80
方法:
L
=大号本地端口正在监听。意味着在“新机器”上将打开一个监听端口,即“隧道的起点”80
这是监听“newmachine”的 TCP 端口1.2.3.4
隧道端点的 IP 号(从“oldmachine”到达)80
隧道端点的 TCP 端口
如果您没有收到任何错误消息,那么您的隧道已启动,您可以从“newmachine”连接到xy.company.net
。
但对于浏览器访问(使用虚拟主机?),我们还需要设置 DNS 解析. 只需添加一个条目到/etc/hosts
:
newmachine# echo "127.0.0.1 xy.company.net" >>/etc/hosts
newmachine#
为什么127.0.0.1
?
首先,您无法xy.company.net
直接从“newmachine”访问,因为它未连接到公司的 VPN - 只有“oldmachine”才连接到。其次,您的访问是通过“oldmachine”ssh
上的登录通过其 VPN 从“newmachine”隧道传输到的xy.company.net
。这意味着您的隧道起点是“newmachine”本身 - 因此127.0.0.1
!
现在您应该能够xy.company.net
通过以下 URL 从 Web 浏览器中访问“newmachine”:
它是如何工作的?对于 http:
- 浏览器获得 xy.company.net 的 DNS 解析 127.0.0.1
- 它连接到127.0.0.1 端口80。
- 您的隧道从此端口开始。流量通过您打开的
ssh
连接路由到“oldmachine”,然后从那里路由到1.2.3.4:80
。 - 从“oldmachine”到 1.2.3.4 的连接将转到公司的 VPN,然后最终转到贵公司的 1.2.3.4。
也许这并不完全符合您的问题,但在此基础上,您可以提供更多技术细节。经过几次迭代,我们最终可以找到适合您的完美答案。
注意:与之相反,-L
还有一个-R
打开端口的R表达表情并隧道返回。
注2:$
表示shell提示符,#
表示root shell提示符