具有一个以太网适配器的多个网关

具有一个以太网适配器的多个网关

我想用一个以太网适配器连接到多个网关,这就是我尝试做的方法。

/etc/网络/接口

auto lo
iface lo inet loopback

# This is my home network.
auto eth0
iface eth0 inet static
    address 192.168.1.102
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 8.8.4.4

# This is an external address, configuration works when placed at eth0.
auto eth0:1
iface eth0:1 inet static
    address 132.45.65.60
    netmask 255.255.255.0
    gateway 132.45.65.57
    dns-nameservers 8.8.8.8 8.8.4.4

我想使用 eth0 作为默认互联网连接,并使用 eth0:1 用于特定服务,比如 nginx。

server {
    listen 132.45.65.60:8080;
    server_name _;
    location / {
        return 403;
    }
}

我怎样才能实现这一点,这可能吗?

答案1

然后你要做的第一件事就是设置默认网关路由的优先级。你可以为路由添加度量来做到这一点。你可以手动执行

sudo route add -net default gw 132.45.65.57 netmask 0.0.0.0 dev eth0:1 metric 10

或者,您可以编写代码来为您执行此操作

sudo nano /etc/networking/interfaces

在接口配置的末尾添加,但在eth0:1接口的配置中

up route add default gw 132.45.65.57 metric 10
down route del default gw 132.45.65.57

像这样的事情

auto eth0:1
iface eth0:1 inet static
     address 132.45.65.60
     netmask 255.255.255.0
     gateway 132.45.65.57
     dns-nameservers 8.8.8.8 8.8.4.4
     up route add default gw 132.45.65.57 metric 10
     down route del default gw 132.45.65.57

此后,您必须标记数据包并通过 eth0:1 路由标记的数据包

我给你提供了一个路由源流量的示例port 8080,你可以针对所需的端口实现

让我们从 开始iptables。在这里我们将8080作为路由的服务。使用mangleiptables 表来修改8080数据包。

  sudo iptables -t mangle -A OUTPUT -p tcp –sport 8080 -j MARK –set-mark 0×1

我们将所有源端口的数据包标记8080为“0×1”。

现在保存并重新启动iptables

service iptables save
service iptables restart

要从中删除该条目,iptables我们可以使用-D而不是-A

/etc/iproute2/rt_tables接下来,只需输入一个条目即可创建一个新的 IP 路由表

100 8080table

为数据包编写规则8080

ip rule add fwmark 0×1 lookup 8080table

在新表中添加路由8080table。这里我们将使用“132.45.65.57”作为网关8080。本例中的地址“132.45.65.57”将是网关地址。eth0:1所有其他流量将通过默认网关(又称)eth0,可通过 IP route show 命令查看。

我们从主表复制除默认网关条目之外的所有条目。

 sudo ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table 8080table $ROUTE; done

将数据包的默认网关条目添加8080到表中8080table

  sudo ip route add default via 132.45.65.57 table 8080table

使用ip route show table 8080table显示 所有路线8080table

就是这样。

编辑1

也许最好根据源路由标记和路由流量

auto eth0:1
iface eth0:1 inet static
     address 132.45.65.60
     netmask 255.255.255.0
     gateway 132.45.65.57
     dns-nameservers 8.8.8.8 8.8.4.4
     up route add default gw 132.45.65.57 metric 10
     down route del default gw 132.45.65.57

此后,您必须标记数据包并通过 eth0:1 路由标记的数据包

我给你举个例子,根据 ip、源来路由流量ip 132.45.65.60

再次使用mangleiptables来修改来自的数据包132.45.65.60

  sudo iptables -t mangle -A OUTPUT -s 132.45.65.60 -j MARK -set-mark 0×1

我们将所有源 IP 的数据包标记132.45.65.60为“0×1”。

现在保存并重新启动iptables

service iptables save
service iptables restart

要从中删除该条目,iptables我们可以使用-D而不是-A

/etc/iproute2/rt_tables接下来,只需输入一个条目即可创建一个新的 IP 路由表

100 132table

为来自源 IP 132.45.65.60 的数据包编写规则

ip rule add fwmark 0×1 lookup 132table

在新表中添加路由132table。这里我们将使用“132.45.65.57”作为网关132.45.65.60。本例中的地址“132.45.65.57”将是网关地址。eth0:1所有其他流量将通过默认网关(又称)eth0,可通过 IP route show 命令查看。

我们从主表复制除默认网关条目之外的所有条目。

 sudo ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table 132table $ROUTE; done

将数据包的默认网关条目添加132.45.65.60到表中132table

  sudo ip route add default via 132.45.65.57 table 132table

使用ip route show table 132table显示 所有路线132table

相关内容