如何在主机操作系统(FreeBSD)和客户操作系统(Ubuntu 23.10)之间的 iptables 中配置 DNAT,以便我可以在两个操作系统上使用 Cloudflare

如何在主机操作系统(FreeBSD)和客户操作系统(Ubuntu 23.10)之间的 iptables 中配置 DNAT,以便我可以在两个操作系统上使用 Cloudflare

我刚刚在 Ubuntu 上安装了 CloudFlare 客户端 + GUI,并使用 bhyve(FreeBSD 虚拟机管理程序)对其进行了虚拟化。Cloudflare 无法在 FreeBSD 上运行。我遵循的说明位于此处:

https://youtu.be/4JuOUjCSj44

以这种方式安装,它将仅在虚拟机内分配给 Ubuntu 的 IP 上运行。对我来说,FreeBSD 的 IP 与分配给 Ubuntu 的 IP 不同。以这种方式配置没有用。

我希望 Cloudflare 获取 FreeBSD 的 IP 地址。

为了实现这个目标,我必须更改 Ubuntu 和 FreeBSD 的网络配置。在这篇文章中,我想寻求有关 Ubuntu 部分的帮助。

我可以解释我是如何配置我的网络的,这样你就可以解释我应该做哪些改变才能获得相同的 IP。

例如,要使用 bhyve 启动 Ubuntu,我使用以下参数:

-s 13,virtio-net,tap19 \

/etc/rc.conf:

ifconfig_em0="DHCP"
local_unbound_enable="YES"

cloned_interfaces="bridge0 tap0 tap1 tap2 tap3 tap4 tap5 tap6 tap7 tap8 tap9 tap10 tap11 tap12 tap13 tap14 tap15 tap16 tap17 tap18 tap19 tap20 em0"

ifconfig_bridge0="addm em0 addm tap0 addm tap1 addm tap2 addm tap3 addm tap4 addm tap5 addm tap6 addm tap7 addm tap8 addm tap9 addm tap10 addm tap11 addm tap12 addm tap13 addm tap14 addm tap15 addm tap16 addm tap17 addm tap18 addm tap19 addm tap20"

/boot/loader.conf

if_tap_load="YES"
if_bridge_load="YES"
bridgestp_load="YES"

/etc/sysctl.conf

net.link.tap.up_on_open=1
net.inet.ip.forwarding=1
net.inet.ip.random_id=1

在 FreeBSD-net ML 上,有人向我建议了以下方法:

您可以将 Ubuntu 机器的 IP 设置为 freeBSD 主机上的默认路由。这将使所有来自 freeBSD 主机的流量通过 warp-tunnel。并在 Ubuntu 机器中配置 DNAT iptables 规则以将流量返回到 freeBSD 机器。这样,即使它在 Ubuntu 客户机上运行,​​您也可以利用 freeBSD 主机的 warp-cloud flare 隧道。并且两者有不同的 IP。

按照该方法,我做了以下事情:

在 FreeBSD 上:

/etc/rc.conf:

ifconfig_em0="inet 192.168.1.5 netmask 255.255.255.0"
defaultrouter="192.168.1.10"

在 Ubuntu 上:

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

iptables -A PREROUTING -t nat -p tcp -d 192.168.1.10 -j DNAT --to-destination 192.168.1.5

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

warp-cli connect

有什么问题?我在 Ubuntu VM 内部有连接,但在 FreeBSD 中却没有。

相关内容