Linux:连接到具有相同 IP 范围的两个不同网络

fro*_*rli 2 networking routing iptables nat

当您打开 wifi 功能时,GoPro 摄像机会创建一个 wifi 热点。无法让它们使用不同的 IP 范围,我需要同时连接到多个 GoPro(使用多个无线接口)。

GoPro 将在两个网络上的 IP 10.5.5.9 上可用。

如何将 IP 地址从 wlan1 转换为不同的范围?例如,wlan1 上的化妆地址 10.5.5.* 可用作 10.1.1.*?

这将允许我在 10.1.1.9 上访问一个 GoPro,在 10.5.5.9 上访问另一个 GoPro。

小智 5

首先,我没有真正测试这个的选项,所以我肯定会有一些细节错误,但基本上你需要特殊的路由来为地址 10.5.5.9 制作一些数据包,以便从 wlan1 和其他一些走出 wlan0(我假设),您将需要 DNAT 和 SNAT 规则在 10.5.5.9 和 10.1.1.9 之间进行转换。

后者将是如下规则:

# iptables -t nat -A OUTPUT -d 10.1.1.9 -j DNAT --to-destination 10.5.5.9
# iptables -t nat -A INPUT -i wlan1 -j SNAT --to-source 10.1.1.9
Run Code Online (Sandbox Code Playgroud)

对于路由,我假设最初 10.5.5.9 数据包从 wlan0 出去。所以你需要一个替代的路由表来启动,用于到 10.1.1.9 的数据包(也被 DNAT 检测)。该表可以设置如下

# ip route add table 26 dev wlan1
# ip route add table 26 10.5.5.9 dev wlan1
# ip rule add priority 10000 fwmark 26 table 26
Run Code Online (Sandbox Code Playgroud)

最后一条规则使表 26 用于标记为 26 的数据包,这需要另一个规则:

# iptables -t mangle -A OUTPUT -d 10.1.1.9 -j MARK --set-mark 26
Run Code Online (Sandbox Code Playgroud)

我假设设置是在 wlan1 和 wlan0 启动后完成的,并且它们的地址都在 10.5.5.0/24 上。并且先前的设置应该具有通过 wlan0 引导 10.5.5.9 数据包的路由(从而使 wlan1 连接未使用)。

在这个解决方案中,网络路径是:首先标记到 10.1.1.9 的数据包,然后通过 DNAT 标记到 10.5.5.9。该标记激活路由表 26,它将 10.5.5.9 数据包定向到 wlan1。并且返回的数据包都是来自 10.1.1.9 的 SNAT-ted。

理论上有效:-)