我已经尝试了近一周的时间来使其发挥作用,但没有成功。我开始感到绝望了。
我有 4 个以太网适配器:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 30:85:a9:ad:54:1e brd ff:ff:ff:ff:ff:ff
inet 10.100.36.2/29 brd 10.100.36.7 scope global eth0
inet6 fe80::3285:a9ff:fead:541e/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether a0:f3:c1:04:64:40 brd ff:ff:ff:ff:ff:ff
inet 69.70.164.242/30 brd 69.70.164.243 scope global eth1
inet6 fe80::a2f3:c1ff:fe04:6440/64 scope link
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether a0:f3:c1:04:a0:2f brd ff:ff:ff:ff:ff:ff
inet 10.45.13.1/24 brd 10.45.13.255 scope global eth2
inet6 fe80::a2f3:c1ff:fe04:a02f/64 scope link
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 28:10:7b:c9:58:76 brd ff:ff:ff:ff:ff:ff
inet 10.45.15.1/24 brd 10.45.15.255 scope global eth3
inet6 fe80::2a10:7bff:fec9:5876/64 scope link
valid_lft forever preferred_lft forever
这是我的 Linux 服务器(Debian)在启动时给我的默认路由:
69.70.164.240/30 dev eth1 proto kernel scope link src 69.70.164.242
10.100.36.0/29 dev eth0 proto kernel scope link src 10.100.36.2
10.45.15.0/24 dev eth3 proto kernel scope link src 10.45.15.1
10.45.13.0/24 dev eth2 proto kernel scope link src 10.45.13.1
default via 10.45.15.254 dev eth3
default via 10.45.13.254 dev eth2
default via 69.70.164.241 dev eth1
default via 10.100.36.1 dev eth0
这就是我想做的。 eth0 是我的 VDSL 线路,eth1 是我的电缆线路。我想要:
- 将所有流量从
10.45.13.0
(eth2) 转发到网关10.100.36.1
(eth0) - 将所有流量从
10.45.15.0
(eth3) 转发到网关69.70.164.241
(eth1)
如果我能完成这项工作,我会很高兴,但我也想让它变得10.45.13.0
不可见10.45.15.0
,反之亦然。
答案1
每个路由表只能有一条默认路由。因此,首先您需要删除除一条之外的所有默认路由。您希望您的 Debian 服务器使用的唯一途径。
对于其他东西,您想要的称为“源路由”,这意味着您根据当前处理的数据包的来源(源)执行不同的路由。
这是一个实际上正是您想要对源路由执行的操作的示例。你的问题的表述有点不稳定,所以我假设你希望你的 debian 服务器也使用你的 VDSL 线路。
这意味着您想要从路由表中删除所有默认路由,但通过 eth0 的路由除外。你的 main/locat RT 应该是这样的:
69.70.164.240/30 dev eth1 proto kernel scope link src 69.70.164.242
10.100.36.0/29 dev eth0 proto kernel scope link src 10.100.36.2
10.45.15.0/24 dev eth3 proto kernel scope link src 10.45.15.1
10.45.13.0/24 dev eth2 proto kernel scope link src 10.45.13.1
default via 10.100.36.1 dev eth0
然后,您按照链接示例创建另一个路由表。您可能更想调用该表UseCable
而不是John
.所以你可以走
echo 200 UseCable >> /etc/iproute2/rt_tables
10.45.13.0
然后你告诉你的内核在数据包源自如下时使用该表:
ip rule add from 10.45.15.0 table UseCable
然后您需要填充 UseCable。下面是一个开始:
ip route add 10.45.15.0/24 dev eth3 table UseCable
ip route add 69.70.164.240/30 dev eth1 table UseCable
ip route add default via 69.70.164.241 table UseCable #that's the default route via cable
好了,那么路由就完成了。我认为您也需要 NAT。所以你需要类似的东西
#for everything from eth3 leaving through eth1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
#for everything from eth2 leaving through eth0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
完毕。这不是最干净的方式,但 10.45.13.0/24 和 10.45.15.0/24 之间的通信是不可能的,因为当源自 10.45.15.0/24 时,路由表不包含 10.45.13.0/24 的条目。
我把细化留给你作为练习。