Debian Jessie 上的两个默认网关

Debian Jessie 上的两个默认网关

请注意,这是重复的,但之前给出的解决方案对我来说不起作用!下面解释一切。

我有两个带有互联网的网络...希望它们都能工作...如果请求是发送到网络#1,则网络#2 应该通过其网关应答该请求...与网络#2 相同 - 它应该应答请求通过它的网关。

ifconfig

eth0      Link encap:Ethernet  HWaddr b8:27:eb:82:ca:0c
          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::57ac:b6e:33c1:8bbb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:797 errors:0 dropped:0 overruns:0 frame:0
          TX packets:797 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:219915 (214.7 KiB)  TX bytes:117516 (114.7 KiB)

wlan0     Link encap:Ethernet  HWaddr b8:27:eb:d7:9f:59
          inet addr:192.168.2.200  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::6463:5ba:3b28:6d39/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1532 errors:0 dropped:1215 overruns:0 frame:0
          TX packets:201 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:364160 (355.6 KiB)  TX bytes:29417 (28.7 KiB)

ip route show table main

default via 192.168.1.1 dev eth0  metric 202
default via 192.168.2.1 dev wlan0  metric 303
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.200  metric 202
192.168.2.0/24 dev wlan0  proto kernel  scope link  src 192.168.2.200  metric 303

我得到了部分有效的解决方案:

ip route add default via 192.168.1.1 dev eth0 table 100
ip route add default via 192.168.2.1 dev wlan0 table 200

ip rule add from all lookup main suppress_prefixlength 0
ip rule add from 192.168.1.0/24 lookup 100
ip rule add from 192.168.2.0/24 lookup 200

例如,这使得 Apache(在路由器上的端口重定向之后)响应来自两个网络的请求,但是......仅来自外部。本地连接通过192.168.1.200192.168.2.200停止工作...我的意思是...我无法再从本地网络连接到 Apache。

有人可以帮我吗?

我也尝试过解决方案,但它不起作用...我无法通过LINKs2公共IP连接到Apache服务器...也许我做错了什么?端口转发似乎有效,因为我可以通过iftop.永远得不到答案,不过。

rt_tables

200 LINK1
201 LINK2

route.sh

ip route add 192.168.1.0/24 dev eth0 src 192.168.1.200 table LINK1
ip route add 192.168.2.0/24 dev wlan0 src 192.168.2.200 table LINK2
ip route add default via 192.168.1.1 table LINK1
ip route add default via 192.168.2.1 table LINK2
ip rule add from 192.168.1.1 table LINK1
ip rule add from 192.168.2.1 table LINK2

在那之后:

sigma@sigma:~/temp $ ip route show table LINK1
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0  scope link  src 192.168.1.200

sigma@sigma:~/temp $ ip route show table LINK2
default via 192.168.2.1 dev wlan0
192.168.2.0/24 dev wlan0  scope link  src 192.168.2.200

sigma@sigma:~/temp $ ip route show table main
default via 192.168.1.1 dev eth0  metric 202
default via 192.168.2.1 dev wlan0  metric 303
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.200  metric 202
192.168.2.0/24 dev wlan0  proto kernel  scope link  src 192.168.2.200  metric 303

sigma@sigma:~/temp $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
default         fiber.home     0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     202    0        0 eth0
192.168.2.0     *               255.255.255.0   U     303    0        0 wlan0

sigma@sigma:~/temp $ ip route show table all
default via 192.168.1.1 dev eth0  table LINK1
192.168.1.0/24 dev eth0  table LINK1  scope link  src 192.168.1.200
default via 192.168.2.1 dev wlan0  table LINK2
192.168.2.0/24 dev wlan0  table LINK2  scope link  src 192.168.2.200
default via 192.168.1.1 dev eth0  metric 202
default via 192.168.2.1 dev wlan0  metric 303
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.200  metric 202
192.168.2.0/24 dev wlan0  proto kernel  scope link  src 192.168.2.200  metric 303
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.1.0 dev eth0  table local  proto kernel  scope link  src 192.168.1.200
local 192.168.1.200 dev eth0  table local  proto kernel  scope host  src 192.168.1.200
broadcast 192.168.1.255 dev eth0  table local  proto kernel  scope link  src 192.168.1.200
broadcast 192.168.2.0 dev wlan0  table local  proto kernel  scope link  src 192.168.2.200
local 192.168.2.200 dev wlan0  table local  proto kernel  scope host  src 192.168.2.200
broadcast 192.168.2.255 dev wlan0  table local  proto kernel  scope link  src 192.168.2.200
local ::1 dev lo  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256
fe80::/64 dev wlan0  proto kernel  metric 256
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101
local ::1 dev lo  table local  proto none  metric 0
local fe80::57ac:b6e:33c1:8bbb dev lo  table local  proto none  metric 0
local fe80::e94f:8405:bbc7:20f5 dev lo  table local  proto none  metric 0
ff00::/8 dev eth0  table local  metric 256
ff00::/8 dev wlan0  table local  metric 256
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101

答案1

假设我正确理解了这个问题:您通过两个本地接口有两个“互联网”连接,并且您希望响应通过它们收到的相同路径。

我可以想到两个干净的解决方案:

1)根据源IP做策略路由。如果源 IP 是来自 eth0 的 IP,则应使用一个网关,否则应使用另一个网关。这与你所做的类似。从我的头顶上看:

ip route add default via GW1 table gw1
ip route add default via GW2 table gw2
ip rule from IP1 table gw1
ip rule from IP2 table gw2

2) 使用 iptables、连接跟踪和 CONNMARK 目标标记传入数据包。在每个传出数据包上恢复该标记,并根据该标记进行策略路由。再次,从我的头顶:

iptables -A INPUT -i wlan0 -t mangle -j MARK --set-mark 1
iptables -A INPUT -i eth0 -t mangle -j MARK --set-mark 2
iptables -A INPUT -j CONNMARK --save-mark
iptables -A OUTPUT -j CONNMARK --restore-mark
ip route add default via GW1 table gw1
ip route add default via GW2 table gw2
ip rule fwmark 1 table gw1
ip rule fwmark 2 table gw2

上面的内容可能需要一些修改,但这就是总体思路。

相关内容