无法设置简单的 SSH VPN 来绕过防火墙

无法设置简单的 SSH VPN 来绕过防火墙

我有一个小型测试网络,由两个通过防火墙连接的 LAN 组成,其中有 Linux 主机(容器)。此防火墙设置为阻止从 LAN 内部访问某些网站B,因此我想检查绕过该防火墙的方法。

为此,我知道和A都是BSSH 服务器(出于测试目的,允许 root 登录、隧道等),而且A已经设置了一个 NAT 服务器,以便它可以查找其他主机的网站等。

在此处输入图片描述

到目前为止,我已经使用以下命令将其设置B为 VPN 客户端和AVPN 服务器,该命令设置了隧道和tun两侧的接口以及地址A_tun0_addressB_tun0_address

root@B:/# ssh -w 0:0 root@A \
       -o "PermitLocalCommand=yes" \
       -o "LocalCommand= ip addr add B_tun0_address/24 dev tun0 && \
       ip link set tun0 up" \
       -o "RemoteCommand=ip addr add A_tun0_address/24 dev tun0 && \
       ip link set tun0 up"```

现在,假设我想从 访问一个被屏蔽的网站B1,为此,我想使用在B...上设置的隧道,但该怎么做呢?我应该以B_tun0_address某种方式将流量重定向到 吗?我不知道从这里开始应该采取什么步骤。

笔记:

这应该相当于执行动态端口转发,例如 ssh -4NT -D <B’s IP>:<B’s port X> <user id>@<A’s IP>B然后用作B代理socks5,但重点是仅使用 VPN 来执行此操作。

编辑1:

根据@tsc_chazz 的评论,我在 B 上设置了以下 iptables 规则来执行 dNAT:

    iptables -t nat -A PREROUTING -s 192.168.20.0/24 ! -d 192.168.20.0/24 -j DNAT --to-destination B_run0_address
    iptables -t nat -A POSTROUTING -j MASQUERADE

另外,在 A 上,我也让它伪装流量:

    iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0

然后,在 B1 上,为了简单起见,我将 B 设置为默认网关:

    ip route del default
    route add default gw 192.168.20.99

现在,我在 Wireshark 中注意到,在为 B1 设置默认路由后,流量会从该主机直接跳转到目的地,无论目的地是哪里。我怀疑 VirtualBox 可能在做一些奇怪的事情,所以我不确定这是否正确。

示例,显示跟踪路由的 Wireshark 跟踪: 在此处输入图片描述

答案1

编辑后,您在第一个 iptables 规则的末尾出现了拼写错误,但我认为您在实际系统上输入正确,因为从其余部分的声音来看,您最终能够发送流量。

至于 wireshark 位,我猜这取决于您从哪里捕获以及您正在查看什么。一两张屏幕截图可能有助于进一步解释这一点。

另外,您只对这里的网络流量感兴趣还是也对其他协议感兴趣?如果只是网络流量,那么将 B 配置为代理服务器可能比进行 NAT 配置更容易。


编辑

您只看到 1 个跳跃,因为它只有 1 个跳跃 - 通信从 B1 --> B 开始并终止。

此命令(改变了跑步):

iptables -t nat -A PREROUTING -s 192.168.20.0/24 ! -d 192.168.20.0/24 -j DNAT --to-destination B_tun0_address

告诉 B,每当它从 192.168.20.0/24 收到发往 192.168.20.0/24 以外任何地方的数据包时,它都应该执行 DNAT 并将目的地更改为 B_tun0_address,这意味着正在响应您的所有跟踪路由并假装是目的地。

如果您希望真正转发流量,则需要撤消该配置行。

您只需要一个 POSTROUTING MASQUERADE 位来隐藏 B 后面的真实源 IP,这将强制 A 使用隧道响应 B。因此,只要 B 优先选择通过 VPN 隧道的默认路由,而不是通过防火墙的路由(我认为应该如此),一切都应该正常。

基本上,恢复这些:

iptables -t nat -A PREROUTING -s 192.168.20.0/24 ! -d 192.168.20.0/24 -j DNAT --to-destination B_tun0_address
iptables -t nat -A POSTROUTING -j MASQUERADE

然后执行以下操作:

iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o B_tun0 -j MASQUERADE

一切就绪。

答案2

这似乎有两个部分。首先,需要将 B 设置为转发来自 192.168.20.0/24 的传入网络流量,这些流量发往 192.168.20.0/24 以外的任何地方,然后B_tun0_address将其转发到 A,再从那里转发到互联网。完成此操作后,您需要做的就是在 B1 中设置一条静态路由,如果流量发往特定网站或任何地方,则将流量发送到 192.168.20.99 - 在这种情况下,您需要将 192.168.20.99 设置为默认网关。

如果 B 已经是 192,168.20.0/24 网络的默认网关,那么您将必须在防火墙中实施过滤规则 - 您在 B 中有一个防火墙,对吗? - 以防止除 B1 之外的任何机器看到 10.8.0.0/24 网络之外的任何内容。

相关内容