![具有一个以太网适配器的多个网关](https://linux22.com/image/989221/%E5%85%B7%E6%9C%89%E4%B8%80%E4%B8%AA%E4%BB%A5%E5%A4%AA%E7%BD%91%E9%80%82%E9%85%8D%E5%99%A8%E7%9A%84%E5%A4%9A%E4%B8%AA%E7%BD%91%E5%85%B3.png)
我想用一个以太网适配器连接到多个网关,这就是我尝试做的方法。
/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
作为路由的服务。使用mangle
iptables 表来修改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
再次使用mangle
表iptables
来修改来自的数据包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
。