FreeBSD jail 作为网关

FreeBSD jail 作为网关

我正在尝试建立一个监狱,作为一些外部客户端的默认网关。

我有一个 VIMAGE jail,它在我的本地网络中有一个专用 IP 地址,我想用它作为客户端的网关。我这样做的原因(如果重要的话)是我想在该 jail 内运行 OpenVPN,这样所有使用该 jail 的 IP 作为网关的客户端都可以透明地通过 VPN。

当我 ssh 进入 jail 时,一切都正常:我可以看到互联网,即使我打开 OpenVPN,它也能正常工作。但是,它不能作为我的客户端的默认网关:名称无法解析,“没有到主机的路由”,等等。

当我跑进tcpdump监狱时,我看到了以下情况:

20:53:23.263597 IP 192.168.1.6.54460 > syd15s01-in-f78.1e100.net.https: UDP, length 109
20:53:23.263636 IP 192.168.1.6.54460 > syd15s01-in-f78.1e100.net.https: UDP, length 109

客户端的 IP 在哪里192.168.1.6,所以我假设客户端尝试通过监狱访问互联网,但没有返回任何信息。我​​有时ICMP也看到一些流量。

我的ipfw配置是:

# less /usr/local/etc/ipfw.rules
#!/bin/sh

EPAIR=$(/sbin/ifconfig -l | tr " " "\n" | /usr/bin/grep epair)
INNER="$(/sbin/ifconfig | grep " -->" | cut -d' ' -f2 | cut -d'.' -f1-3).0/24"
ipfw -q -f flush
ipfw -q nat 1 config if ${EPAIR}
ipfw -q add nat 1 all from ${INNER} to any via ${EPAIR}
ipfw -q add nat 1 all from any to any in via ${EPAIR}
# ipfw add check-state

TUN=$(/sbin/ifconfig -l | tr " " "\n" | /usr/bin/grep tun)
ifconfig ${TUN} name tun0

我认为某些地方缺少一些 NAT,但我不太明白发生了什么,因此如果能提供任何帮助我将不胜感激。

当我的客户使用 jail 的 IP 作为默认网关时,我该怎么做才能允许他们的流量通过 jail/vpn?

答案1

FreeBSD jail 基本上是一种轻量级虚拟化,因此它的最佳用途是将一些应用程序作为容器运行。它当然有一个网络堆栈,但是,将其功能与主机系统的功能进行比较,我认为它相当有限。

因此,选择 jail 作为容器路由器似乎是一个糟糕的选择。您应该做的是使用多个 FIB。顺便说一下,同样的方法适用于所有现代网络操作系统 - Linux、JunOS、Cisco IOS 等。

我建议将其添加net.fibs="4"/boot/loader.conf,然后重新启动并使用多个路由表。这样,您可以在单独的 FIB(如)中启动 OpenVPN 网关setfib 1 /usr/local/bin ... whatever,然后使用 ipfw 将客户端流量分配给它setfib,或者直接将客户端接口分配给此 FIB。

相关内容