IP 伪装在上行链路之间自动切换

IP 伪装在上行链路之间自动切换

运行 Debian 10 并具有两个 Internet 连接。

主连接会定期断开并恢复。

wlan0发生故障时我该如何enp0s6f1u2接管?互联网在本地设备中继续工作,但网络上的其他设备则无法工作,因为wlan0这是硬编码到我的iptables脚本中的。

我该怎么说iptables输出伪装成默认路由所在的任何接口

/etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

iface enp0s10 inet manual


### WiFi for access point

allow-hotplug wlx00e032800384
iface wlx00e032800384 inet manual
        pre-up ip link set dev wlx00e032800384 address 02:e0:32:80:03:80


### Bridge: internal network

auto br0
iface br0 inet static
#       bridge_ports enp0s10 wlx00e032800384
        bridge_ports enp0s10 ap_wep ap_open
        address 192.168.1.31
        netmask 255.255.255.0


### WiFi to Internet: physical plus virtual for each network defined in wpa_supplicant.conf

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#        wpa-ssid RWB
#        wpa-psk MYWIFI3518

allow-hotplug RWB
iface RWB inet dhcp
        metric 1


### 4G to Internet (failover)

auto enp0s6f1u2
allow-hotplug enp0s6f1u2
iface enp0s6f1u2 inet dhcp
        metric 9999

iptables脚本

#!/bin/sh

iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

# Squid transparent proxy for HTTP (not HTTPS)

iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to 192.168.1.31:3128
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 3128

# IP masquerade

iptables -A FORWARD -o wlan0 -i br0 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

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

iptables-save > /etc/iptables/rules.v4

一些ip route

当两个接口都处于 up 状态时:

# ip route
default via 192.168.43.40 dev wlan0 metric 1
default via 192.168.42.129 dev enp0s6f1u2 metric 9999
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.31
192.168.42.0/24 dev enp0s6f1u2 proto kernel scope link src 192.168.42.221
192.168.43.0/24 dev wlan0 proto kernel scope link src 192.168.43.7

什么时候wlan0发生:

# ip route
default via 192.168.42.129 dev enp0s6f1u2 metric 9999
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.31
192.168.42.0/24 dev enp0s6f1u2 proto kernel scope link src 192.168.42.221

答案1

我如何在 iptables 中说:输出伪装到默认路由所在的任何接口?

默认情况下会发生这种情况 - iptables 首先不会决定输出接口。您的规则实际上所说的是相反的:“如果输出接口是 wlan0,然后伪装数据包”。 (这实际上就是为什么该链被命名为邮政路由。)

因此,您可以简单地设置两个 iptables 规则,每个规则匹配一个接口,并且都应用 SNAT(伪装)。或者,您可以设置一个按目标地址匹配且不关心接口的规则(例如,! -s 192.168.0.0/16伪装所有未发送到 LAN 的内容,而不管接口是什么)。

(“FORWARD” 规则也是如此 - 您只需拥有两个规则,即可接受来自所有必要接口的流量。)

相关内容