首页 > 其他分享 >多网卡 配置多网关

多网卡 配置多网关

时间:2024-05-31 09:45:21浏览次数:23  
标签:24 网关 ip 配置 192.168 网卡 table 路由

 

来自:

在具有多网卡和多网关的计算机系统中进行配置,可以通过以下步骤实现。配置的具体步骤和方法可能会因操作系统的不同而有所不同。这里主要以Linux系统为例,介绍如何配置多网卡和多网关。

1. 确定网卡接口和IP地址

假设我们有两块网卡:

  • 网卡1 (eth0),连接到网络1 (192.168.1.0/24),网关为 192.168.1.1
  • 网卡2 (eth1),连接到网络2 (10.0.0.0/24),网关为 10.0.0.1

2. 配置网卡IP地址

编辑网络配置文件,给每个网卡分配一个IP地址。

配置网卡eth0

文件路径:/etc/network/interfaces

shell auto eth0 iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0 gateway 192.168.1.1

配置网卡eth1

同样在/etc/network/interfaces文件中添加:

shell auto eth1 iface eth1 inet static address 10.0.0.2 netmask 255.255.255.0 gateway 10.0.0.1

3. 配置路由表

为了使用多网关,需要配置路由表。我们需要使用ip route命令来配置策略路由。

创建路由表

编辑文件 /etc/iproute2/rt_tables,添加两条自定义路由表:

shell 1 rt1 2 rt2

配置网卡eth0的路由

shell ip route add 192.168.1.0/24 dev eth0 src 192.168.1.2 table rt1 ip route add default via 192.168.1.1 dev eth0 table rt1

配置网卡eth1的路由

shell ip route add 10.0.0.0/24 dev eth1 src 10.0.0.2 table rt2 ip route add default via 10.0.0.1 dev eth1 table rt2

4. 配置路由规则

使用ip rule命令来配置路由规则:

shell ip rule add from 192.168.1.2/32 table rt1 ip rule add from 10.0.0.2/32 table rt2

5. 保存配置

为了使这些配置在系统重启后依然有效,可以将这些命令添加到系统启动脚本中。

编辑文件 /etc/rc.local 并添加以下内容:

shell #!/bin/sh -e # 配置网卡 eth0 的路由 ip route add 192.168.1.0/24 dev eth0 src 192.168.1.2 table rt1 ip route add default via 192.168.1.1 dev eth0 table rt1 # 配置网卡 eth1 的路由 ip route add 10.0.0.0/24 dev eth1 src 10.0.0.2 table rt2 ip route add default via 10.0.0.1 dev eth1 table rt2 # 配置路由规则 ip rule add from 192.168.1.2/32 table rt1 ip rule add from 10.0.0.2/32 table rt2 exit 0

6. 重启网络服务

最后,重启网络服务以使配置生效:

shell sudo systemctl restart networking

通过上述步骤,可以在具有多网卡和多网关的系统上实现正确的网络配置,从而确保流量根据不同的路由表进行路由。

==================================================

来自:https://www.ichenfu.com/2020/11/24/multi-nics-policy-routing/

多网卡环境下利用策略路由实现网络流量同进同出

 发表于 2020年11月24日 9:46  更新于 2020年11月24日 14:49  分类于 Linux  阅读次数: 2973

当一台机器有超过1块网卡,并且配置的IP地址不在一个段里的时候,会出现在外部只有一个IP地址能够ping通的情况,举个最简单的例子:

一个有2块网卡的机器:

[root@test]# ip addr
2: enp24s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 11:11:11:11:11:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/24 brd 192.168.100.255 scope global enp24s0f1
       valid_lft forever preferred_lft forever
3: enp24s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 22:22:22:22:22:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.10/24 brd 192.168.200.255 scope global enp24s0f1
       valid_lft forever preferred_lft forever

可以看到两块网卡,分别配置了192.168.100.10192.168.200.10这两个IP,再看看机器的默认路由:

[root@test]# ip route
default via 192.168.100.1 dev enp24s0f0
192.168.100.0/24 dev enp24s0f0 proto kernel scope link src 192.168.100.10
192.168.200.0/24 dev enp24s0f1 proto kernel scope link src 192.168.200.10

从路由可以发现这机器的默认网关是192.168.100.1,那么,如果跨越网关去ping这台机器的话,会出现只有192.168.100.10能通的情况:

[root@test2]# ping 192.168.100.10 -c 2
PING 192.168.100.10 (192.168.100.10) 56(84) bytes of data.
64 bytes from 192.168.100.10: icmp_seq=1 ttl=56 time=1.84 ms
64 bytes from 192.168.100.10: icmp_seq=2 ttl=56 time=0.804 ms

--- 192.168.100.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.804/1.319/1.835/0.515 ms

[root@test2]# ping 192.168.200.10 -c 2
PING ping 192.168.200.10 (ping 192.168.200.10) 56(84) bytes of data.
^C
--- ping 192.168.200.10 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1062ms

可以看到只有第一个IP能通。那么,如果想让两个IP都能通信需要怎么做呢?我们简单分析一下:

假设ping的源主机IP地址是192.168.1.20,那么ping包会首先到达192.168.200.0/24的网关,在这个场景是192.168.200.1,然后网关把包转发给机器的第二块网卡,从接收的这条链路来说,是没有问题的。

那么回包的链路呢?因为发起通信的源IP不在同网段,所以会查询路由表,会根据路由表发给默认网关,而测试机器的默认网关是192.168.100.1,需要将流量从第一块网卡出去。

从回包的链路考虑就会有一些问题,相当于流量从一块网卡进来,但是又从另外网卡出去。默认情况下,Linux会通过一个Reverse Path Filtering (rp_filter)的机制,限制这种情况发生。
那么要修改也很简单:

[root@test2]# echo "net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.conf
[root@test2]# sysctl -p

配置rp_filter=0之后,再去测试,发现第二块网卡已经可以正常被外部访问了。

到这里,网络通断问题算是解决了,但是呢,流量路径并不是最优解。目前这个情况,所有出去的流量全都走网卡1,一方面网卡2的出方向带宽浪费了,另外一方面如果网卡1出现一些问题导致中断,那网卡2的IP地址也无法访问了,可用性并没有提升。

针对两块网卡的机器,一个很自然的想法,是不是可以某一块网卡进来的流量,也从同一块网卡出去呢?

这里就需要策略路由的帮助了,其实这个问题,可以转化成根据source地址选择不同的路由,因为从这台机器发出去的网络包,源地址不是192.168.100.10,就是192.168.200.10,那需求就很简单了,如果发现源地址是192.168.100.10,那就走网卡1的默认路由出去,如果源地址是192.168.200.10,那就走网卡2的默认路由出去。这样的话,相当于机器上有两个默认路由了,这样可以么?

答案是可以的,不过需要将这两个默认路由分到两张不同的路由表上。根据这篇Routing Tables文章可以看到Linux支持很多张路由表,其实默认我们用ip route命令操作的就是main这张表。通过加表id或者名字的方式,可以让ip命令操作不同的路由表。

[root@test]# ip route add default via 192.168.200.1 dev enp24s0f1 table 101
[root@test]# ip route show table 101
default via 192.168.200.1 dev enp24s0f1

这里添加了一条新的默认路由default via 192.168.200.1 dev enp24s0f1到编号为101的表里。现在有了路由表,还需要一个策略,来让对应源地址的流量查找这张路由表就行了:

[root@test]# ip rule add from 192.168.200.0/24 table 101
[root@test]# ip rule show
0:      from all lookup local
32765:  from 192.168.200.0/24 lookup 101
32766:  from all lookup main
32767:  from all lookup default

这里加了一条规则,如果源地址在192.168.200.0/24内,就使用101这张路由表,而这张路由表就上面加的以网卡2为出口的。这样就实现了网卡流量同进同出的需求。

其实可以通过ip rule show看到,默认有几条规则,优先级最高的规则是local这张表,其次是刚添加的规则,然后是main这张表,最后是default这张表。

最后还有一个问题,这些配置怎么持久化呢?参考红帽的文档Networking Guide,可以在/etc/sysconfig/network-scripts目录下,添加rule-XXXXroute-XXXX文件,实现配置持久化:

[root@test]# cat route-enp24s0f1
default via 192.168.200.1 dev eth1 table 101
[root@test]# cat rule-enp24s0f1
from 192.168.200.0/24 table 101

添加了配置文件后,执行ifup enp24s0f1就可以实现自动的配置了。

 

==============================================

 

标签:24,网关,ip,配置,192.168,网卡,table,路由
From: https://www.cnblogs.com/rebrobot/p/18223836

相关文章

  • Linux 下 Node 安装与配置
    一、官网地址:Node.js中文网二、linux版本:lsb_release-a三、下载安装包3.1、下载地址:下载|Node.js中文网3.2、使用wget命令下载到linux服务器(也可以下载到本地再上传,在/usr/local目录)wgethttps://cdn.npmmirror.com/binaries/node/v16.17.0/node-v16.17.0-linux-x64.t......
  • 你认识nginx吗,nginx是做什么的,nginx可以做什么 --2)nginx配置
    hello大家今天教大家如何用nginx实验tomcat的负载均衡,同理其他的也可以,如httpd等首先需要准备一个nginx和tomcat包,这里用到的是版本号为然后需要准备最少三台linux虚拟机,然后我们开始吧1.安装tomcat解包tarzxf/mnt/apache-tomcat-8.5.16.tar.gz-C/usr/src   ......
  • harbor -- docker私有仓库安装配置
    1安装docker-compose$curl-L"https://get.daocloud.io/docker/compose/releases/download/v1.25.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose$chmod+x/usr/local/bin/docker-compose2安装配置harbor$wgethttps://github.c......
  • 在 Flask 项目中配置 Session:简明指南
    在Flask项目中配置Session:简明指南本文介绍如何在Flask项目中配置会话1.Flask内置会话Flask自带会话管理功能,使用客户端Cookie存储会话数据。默认情况下,会话数据是签名的,以防止篡改,但未加密。因此,不建议在会话中存储敏感信息。Flask内置会话适用于小型应用或会话数......
  • 防止浏览器缓存了静态的配置等文件(例如外部的config.js 等文件)
    防止浏览器缓存了静态的配置文件前言1、在script引入的时候添加随机数1.1、引入js文件1.2、引入css文件2、通过html文件的<meta>设置防止缓存3、使用HTTP响应头:前言在实际开发中浏览器的缓存问题一直是一个很让人头疼的问题,尤其是我们打包时候防止的静态配置文件con......
  • Ubuntu server 24 安装配置 snort3 3.2.1.0 网络入侵检测防御系统 配置注册规则集
    一下载并安装源代码地址:https://github.com/snort3/snort3/releases#下载,解压wgethttps://github.com/snort3/snort3/archive/refs/tags/3.2.1.0.tar.gztarzxvf3.2.1.0.tar.gz二 安装软件依赖包1安装依赖包sudoaptupdatesudoaptinstallbuild-essentia......
  • 工控现场什么情况下会采用Modbus转Profinet网关
    工控现场什么情况下会采用Modbus转Profinet网关一、原因:工控现场需要将Modbus转换为Profinet协议,这是由于在工业控制领域中,不同设备之间的通信协议多样,而Modbus和Profinet分别代表着两种不同的通信协议。Modbus是一种最常见的工业通信协议,但其速度较慢,数据量有限,在一些需要快速......
  • ceph客户端配置自动挂载存储服务
    1.安装支持ceph的内核模块可选:centos/ubuntu:yuminstall-yceph-common或aptinstall-yceph-common2.拷贝认证密钥cephadmin@ceph-deploy:~/ceph-cluster$sudoscpceph.confceph.client.admin.keyringroot@<客户端服务器IP>:/etc/ceph测试获取集群信息:客户......
  • 特殊需求的配置
    三.特殊需求配置由于很多题目有乱七八糟的配置,uoj用了一些不清真的方法来实现。1.子任务子任务模式中,必须把某个subtest的数据全部通过才能拿到对应的分数。在problem.conf中,可以设置每个子任务在哪个测试点结束,并给每个子任务分配对应的分数。它的写法如下:[n_tests40.........
  • 传统题的配置
    二.传统题配置1.数据对于传统题,上传的×.zip数据包应当包括这些内容:题目配置文件测试数据额外测试数据(包括题面中所给的测试样例)(开启hack)数据检验器(开启hack)标准程序2.题目配置文件题目配置文件应当命名为problem.conf。这是一份配置的样例:[n_tests10n_ex_tests1n......