使用 iptables 如何将流量从 virtualbox 内部适配器路由到 eth0 接口?

使用 iptables 如何将流量从 virtualbox 内部适配器路由到 eth0 接口?

我对 iptables 进行了更深入的学习,一切进展顺利,但我对使用 DNAT、SNAT 和 MASQUERADE 感到困惑,我对它们进行了练习,但找不到简单地将流量从一个接口路由到另一个接口的方法,就像我尝试将流量从 virtualbox 主机专用适配器路由到 eth0(我真的不知道使用 iptables 是否可以做到这一点),我在互联网上找到了几篇关于这个主题的帖子(比如在 wlan0 和 eth0 之间路由),其中有很多 iptables 语法,但似乎都不起作用,所以有人可以提供正确的语法吗?或者甚至可以说出可能与 iptables 中的其他表有关,或者至少是使用了 SNAT、DNAT 和 MASQUERADE。

答案1

在介绍 iptables 之前,不是你唯一需要做的就是。首先,你必须在主机上启用 IPv4 转发,

 echo 1 > /proc/sys/net/ipv4/ip_forward

并且在客户机上,你必须设置默认网关,

 ip route add default via 192.168.56.1 dev eth0

如果您的内部适配器正在使用子网192.168.56.0/24(默认),否则请进行相应更改。

至于 iptables:通过内部适配器并尝试到达互联网的数据包将携带来宾的源地址,而在您的 LAN 上,由于它属于不同的子网,因此没有人知道该地址192.168.56.1。因此,它永远不会收到回复。因此,我们需要一条iptables规则,将源地址重写为主机的地址,以便路由器/调制解调器/网关可以访问该主机。iptables它本身将跟踪连接,以便将回复数据包正确发送给来宾,而不是被主机扣留;我们无需做任何事情。

这两条iptables规则都适用,

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
    iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.15

(以上假设主机的 IP 地址为 192.168.1.15 并且通过 连接到调制解调器/网关/路由器eth0;如果不是,请相应更改)。这两个语句之间的区别很明显:使用 SNAT 时,您必须明确说明接口的 IP 地址,而使用 MASQUERADE 时则不需要。因此,如果由于任何原因您的接口 IP 地址发生变化,则使用 SNAT 的规则不再正确,而使用 MASQUERADE(每次使用时都会检查 IP 地址)的规则则无需调整。显然,MASQUERADE 比 SNAT 慢一点。

就我个人而言,我更喜欢 MASQUERADE,因为它使我的防火墙配置可移植,但是,正如他们所说,YMMV。

答案2

iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -d 0/0 -j MASQUERADE

将其替换192.168.56.0/24为您的仅主机网络地址,它就应该可以工作。

但是它将是从 Host_only 网络 ethX/wlanX 开始的一个方向,并且使用主机上的默认网关,距离更远,如果您想朝相反的方向走,那么您的所有设备都应该有指向您的 ethX/wlanX IP 地址的默认网关

相关内容