在 7 个子网之间进行路由,其中​​ 2 个子网具有动态分配的 IP

在 7 个子网之间进行路由,其中​​ 2 个子网具有动态分配的 IP

我在极其复杂的路由方案中使用 RaspberryPi(Raspbian OS),我可以管理它直到子网数量达到五个:)

目前我有以下接口,如ifconfig所示:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.1.251  netmask 255.255.255.0  broadcast 192.168.1.255
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.44.1  netmask 255.255.255.0  broadcast 192.168.44.255
    ether b8:27:eb:b9:ca:47  txqueuelen 1000  (Ethernet)
eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.45.1  netmask 255.255.255.0  broadcast 192.168.45.255
    ether b8:27:eb:b9:ca:47  txqueuelen 1000  (Ethernet)
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
    inet 10.35.0.74  netmask 255.255.255.255  destination 10.35.0.73
tun1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
    inet 10.35.0.18  netmask 255.255.255.255  destination 10.35.0.17
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.42.1  netmask 255.255.255.0  broadcast 192.168.42.255
wlan1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
    inet 192.168.46.1  netmask 255.255.255.0  broadcast 192.168.46.255

eth0提供与外界的互联网访问(固定IP)

tun0tun1是与不同 VPN 服务器的 VPN 接口,它们从各自的服务器动态分配 IP(似乎是核心问题)

wlan0WLAN1是 wifi 网络(作为接入点!)应该路由全部他们的流量通过tun0tun1, 分别

eth0:1eth0:2是与以下设备共享硬件的接口:eth0(RaspberryPi 上只有一个以太网端口),并且应提供与wlan0WLAN1,而是连接到有线客户端。

DHCP 服务器在 RaspberryPi 上运行,以确保wlan0WLAN1向无线客户端分配各自类别的地址。当然,共享线路上不提供 DHCP —— 我配置了每个客户设备通过 192.168.44.1 或 192.168.45.1 路由其流量,具体取决于我希望它们连接到哪个 VPN(或不连接到 VPN)。

如果还不是很清楚,以下是我必须处理的所有网络:

eth0,192.168.1.1/24(上行互联网)

eth0:1, 192.168.44.1/24(通过 tun0 的下行有线客户端)

eth0:2, 192.168.45.1/24(通过 tun1 的下游有线客户端)

tun0,10.35.0.74/32(第一个上行 VPN)

tun1,10.35.0.18/32(第二个上游 VPN)

wlan0,192.168.42.1/24(通过tun0的下行无线客户端)

wlan0,192.168.46.1/24(通过tun1的下行无线客户端)

请注意,这是当前的配置中,VPN 服务器提供的 IP 以粗体显示。

该问题表示为大胆的- VPN 服务器提供的 IP 在每次重新连接后都会动态更改(即使没有,也可能更改)。对我来说,如果所有地址都是固定的,那么即使是这种多路路由也很容易弄清楚。使用一个 VPN、一个无线和 eth0:1 也很容易,因为 VPN 服务器推送默认路由连接时,其余的都很简单。无论如何,我知道要为一个 wifi 设置一个 NAT,以便将其路由到一个 VPN

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

如图所示:

https://pimylifeup.com/raspberry-pi-vpn-access-point/

然而,两个 VPN 连接我必须防止服务器干扰我的路由,当然我可以这样做:

pull-filter ignore redirect-gateway

在 VPN 客户端配置文件中。

在我这样做之后,我迷失了。流量显然没有被路由到tun0或者tun1。VPN 服务器和我之间的区别在于,服务器可以推送确切的路线它知道确切的 IPVPN 接口(服务器决定),我不知道!

我尝试使用iptables,仅基于网络设备名称,但到目前为止我还没有成功。有人能建议我可以采取的正确路线来设置此路由吗?

答案1

VPN 服务器和我之间的区别在于,服务器可以推送准确的路由,因为它知道 VPN 接口的准确 IP(服务器确定它),而我不知道!

您不需要。您的 VPN 客户端创建的“tun”接口是“第 3 层”接口,根本不使用路由网关地址 - 您只需通过整个设备路由流量即可获得相同的结果。例如:

ip route add <dstA>/24 dev tun0
ip route add <dstB>/24 dev tun1

或者如果您希望它基于客户端 IP 地址:

ip route add 0.0.0.0/0 dev tun0 table 10
ip rule add pref 100 from 192.168.44.0/24 lookup 10

(在以太网、Wi-Fi 或“tap”等第 2 层接口上,同一个接口会根据您发送数据包的 MAC 地址将您连接到多个本地设备。您在路由中指定的“网关”或“通过”地址仅用于一件事:它会被解析为 MAC 地址。

但是,诸如“tun”或“ppp”之类的第 3 层接口根本没有 MAC 寻址 - 它们只有两端,并且没有“在线”主机和“远程”主机之间的区别。因此,路由不需要网关,因为无论您发送什么,数据包总是到达同一个目的地,在本例中是 VPN 服务器。)

最后,如果你做过需要知道默认网关地址,您可以让 VPN 客户端告诉您 – 例如 OpenVPN 支持--up接收有关网络配置的所有信息的脚本。

eth0:1 和 eth0:2 是与 eth0 共享硬件的接口

由于历史原因,ifconfig 会告诉你这些谎言。这些“别名”接口实际上在 Linux 上已经存在很长时间了;如今,操作系统将它们作为单个 eth0 接口进行管理,该接口只是分配了多个地址。

另外需要注意的是,出于与上一节相同的原因,客户端使用 eth0:1 和 eth0:2 作为网关并没有太大区别——它们的 IP 地址都解析为完全相同的 MAC 地址。只能通过客户端自己的源 IP 地址来区分数据包。

相关内容