如何在 Linux 上通过 VPN 转发端口

如何在 Linux 上通过 VPN 转发端口

我正在组织一个小型 CTF(黑客竞赛),有一台托管虚拟机的机器。其中一个虚拟机将成为目标。

无法通过互联网访问主机,因此我设置了一台 Digital Ocean 机器作为 OpenVPN 服务器,并将 VM 主机设置为客户端。下图显示了设置: 网络设置

我的 OpenVPN 配置允许客户端之间的通信,并且已推送到 VM 网络 (virtnet) 的路由。此部分工作正常,Jump 主机可以访问 192.168.160.12 机器。

在 Jump 主机上我添加了以下防火墙规则:

iptables -A FORWARD -d 192.168.160.12 -p tcp --dport 11000 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11000 -j DNAT --to-destination 192.168.160.12:11000

在 VMHost 机器上我执行了以下操作:

iptables -I FORWARD -o tun1 -j ACCEPT
iptables -I FORWARD -i tun1 -j ACCEPT

我相信这足以将流量从互联网路由到 192.168.160.12 VM,但事实并非如此。

它到达 VMHost 计算机,但未转发到 VM。当从 Jump 主机 ( nc 192.168.160.12 11000) 执行 netcat 时,一切正常。VM 已到达并响应,但当我从互联网(nc 178.62.XXX.YYY 11000从 Me 计算机)执行相同操作时,流量到达 Jump 主机,转发到 VMHost,到达 tun1 接口上的 VMHost,但不会像 Jump 主机是发起者时那样转发到 virbr0 接口。

为什么会有这种差异呢?

相关内容