我有一个小型测试网络,由两个通过防火墙连接的 LAN 组成,其中有 Linux 主机(容器)。此防火墙设置为阻止从 LAN 内部访问某些网站B
,因此我想检查绕过该防火墙的方法。
为此,我知道和A
都是B
SSH 服务器(出于测试目的,允许 root 登录、隧道等),而且A
已经设置了一个 NAT 服务器,以便它可以查找其他主机的网站等。
到目前为止,我已经使用以下命令将其设置B
为 VPN 客户端和A
VPN 服务器,该命令设置了隧道和tun
两侧的接口以及地址A_tun0_address
和B_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 可能在做一些奇怪的事情,所以我不确定这是否正确。
答案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 网络之外的任何内容。