详细讲解 在Linux下配置基于策略的路由(示例如何路由mark标志包)

传统路由器在网络和需求变得复杂时将无法满足需要,而一种基于策略的路由给了我们更好的选择。本文给出一个Linux下的配置实例,它在2.4G奔腾4处理器、256M内存的计算机上运行通过,并在160多台电脑的网络环境下运转正常。

 

基于策略的路由比传统路由更强大,使用更灵活,它使网络管理者不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址来选择转发路径。在现实的网络应用中,这种选择的自由性还是很需要的。而Linux从2.1版本的内核开始就实现了对策略路由的支持,下面就介绍一个配置实例,以期对读者有所帮助。

 

实例背景

 

如图所示,两个内部网通过远端路由器1与因特网相联,通过远端路由器2与上级网相联, Linux服务器做策略路由器,内有4块网卡。IP地址的分配情况如表所示。

 

在应用需求方面,内网1允许通过远端路由器1(172.22.254.254)连接因特网,但只允许Http协议、Ftp协议经常性通过,其他协议分时间段开放(这样做是为了避免员工在上班时间打网络游戏和聊天),例如在上班时间(7:30~16:30)封闭,在下班时间(16:30~7:30)和周六、日全天开放。而且,内网1无权访问内网2及上级网,但可以访问内网2上的服务器。而允许内网2访问外网,上级网则只能访问内网2上的192.168.1.2服务器。而防火墙主要用来阻止外网主动访问内网,防止网络攻击。

 

实现过程

 

这里我们选择Red Hat Enterprise Linux WS 3操作系统,其内核版本是2.4.21,对策略路由已经有了很好的支持,下面的配置也以此为基础。

 

1.设置IP地址

 

首先,执行如下命令:

ifconfig eth0 10.89.9.1 netmask 255.255.255.0

ifconfig eth1 192.168.1.1 netmask 255.255.255.0

ifconfig eth2 172.22.254.14 netmask 255.255.255.0

ifconfig eth3 10.140.133.14 netmask 255.255.255.0

为了让计算机启动时自动设置IP地址,还需要分别修改/etc/sysconfig/network-scripts/下的四个文件:ifcfg-eth0、ifcfg-eth1、ifcfg-eth2、ifcfg-eth3,将ONBOOT属性设为yes,即“ONBOOT=yes”,文件格式如下:

# Intel Corp.|82545EM Gigabit Ethernet Controller (Copper)

DEVICE=eth0

BOOTPROTO=none

HWADDR=00:0c:76:20:54:71

ONBOOT=yes

TYPE=Ethernet

USERCTL=yes

PEERDNS=no

NETMASK=255.255.255.0

IPADDR=10.89.9.1

 

如果你不喜欢命令行模式,也可以在图形模式下进行以上操作:主菜单→系统设置→网络,设好IP地址并激活,并且选中“当计算机启动时激活设备”选项。

 

2.打开转发功能

 

执行命令“echo “1” > /proc/sys/net/ipv4/ip_forward”,或者在/etc/sysconfig/network文件中添加“FORWARD_IPV4=yes”。

 

3.创建路由表

 

编辑 /etc/iproute2/rt_tables 文件,执行如下命令。在这里新添加了4个路由表,分别为int1 、int2、int3、int4。

# reserved values

#255 local

#254 main

#253 default

#0 unspec

# local

#1 inr.ruhep

1 int1

2 int2

3 int3

4 int4

 

4.添加路由

 

执行如下命令:

ip route add default via 10.89.9.1 table int1

ip route add default via 192.168.1.1 table int2

ip route add default via 172.22.254.254 table int3

ip route add 192.168.0.0/16 via 10.140.133.254 table int4

ip route add default via 172.22.254.254 table int4

这里在int4路由表中添加了两条路由,当进入到该路由表之后,要到192.168.0.0/16的数据包则路由到10.140.133.254,其他数据包则路由到172.22.254.254。

 

5.标记(MARK)特殊包

 

执行如下两条命令:

iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80,8080,20,21 -s 10.89.9.0/24 -j MARK --set-mark 1

iptables -t mangle -A PREROUTING -p udp --dport 53 -s 10.89.9.0/24 -j MARK --set-mark 2

这两条命令是将来自10.89.9.0/24的目的端口是80、8080、20或21的数据包和UDP端口是53的数据包分别标记为1或2,然后就可以针对这些标记过的数据包制定相应的规则了。(对外发出的DNS请求用的是UDP 53端口)

为了实现防火墙的功能,只允许已经建立联机的数据包进入内网,就要把进入两个内网的已经建立联机的数据包进行标记。执行如下命令:

iptables -t mangle -A PREROUTING -p ALL -d 10.89.9.0/24 -m state --state ESTABLISHED,RELATED -j MARK --set-mark 3

iptables -t mangle -A PREROUTING -p ALL -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j MARK --set-mark 4

 

6.创建路由规则

执行如下命令:

ip rule add from 192.168.1.0/24 pref 11 table int4

ip rule add to 192.168.1.2 pref 21 table int2

ip rule add fwmark 4 pref 31 table int2

ip rule add fwmark 1 pref 41 table int3

ip rule add fwmark 2 pref 42 table int3

ip rule add fwmark 3 pref 51 table int1

接着执行命令“ip route flush cache”,刷新路由缓冲,让以上的这些命令立刻生效,否则需要等上一段时间。

7.实现分时间段控制

若是按照以上的配置,内网1的用户只能上网浏览网页和下载,为了对其他功能实现分时间段开放,需要做以下工作:

首先编辑命令脚本文件ropen (开放)和rclose (限制)。执行命令“vi /bin/ropen”,ropen文件内容如下:

/sbin/ip rule add from 10.89.9.0/24 pref 40 table int3

/sbin/ip route flush cache

执行命令“vi /bin/rclose”,rclose文件内容如下:

/sbin/ip rule del from 10.89.9.0/24 pref 40

/sbin/ip route flush cache

 

 

如果不习惯命令行方式,也可以在图形界面下生成这两个文件,生成文件之后,需要增加可执行属性方可执行:分别执行命令“chmod +x ropen”和“chmod +x rclose”。

接着,利用crontab命令实现自动运行。这里需要编辑一个文本文件,格式如下:

minute hour dayofmonth monthofyear dayofweek “命令”

其中每部分名称及取值范围是:minute代表分钟,取值范围是00~59;hour代表小时,取值范围是00~23;dayofmonth代表某天,取值范围是01~31;monthofyear代表月份,取值范围是01~12;dayofweek代表星期,取值范围是01~07。若需要忽略其中某一部分就用星号(*)代替。例如,文件名设为mycron,内容可编辑如下:

 

30 07 * * 01,02,03,04,05 "/bin/ropen"

30 16 * * 01,02,03,04,05 "/bin/rclose"

最后执行crontab命令,将所编辑的文件mycron装载并启动,命令为“crontab mycron”。

 

<think>我们正在讨论操作系统中的策略路由配置方法和原理。根据引用内容,策略路由是一种比传统目的地址路由更灵活的机制,它允许根据数据的多种属性(如源地址、目的地址、协议、端口等)来选择不同的路由表。在Linux中,策略路由从内核2.1开始引入,其核心是多路由表和规则。 配置策略路由通常涉及两个主要步骤: 1. 创建自定义路由表:首先需要定义额外的路由表(除了默认的路由表)。 2. 定义规则:然后创建规则来指定哪些数据使用哪个路由表。 下面是一个具体的配置示例(以Linux为例): ### 配置步骤 1. **添加自定义路由表** 编辑`/etc/iproute2/rt_tables`文件,添加一个新的路由表。例如,添加一个名为`custom`的表,编号为100: ``` 100 custom ``` 2. **向自定义路由表中添加路由** 使用`ip route`命令向自定义路由表添加路由。例如,将目标网络`192.168.1.0/24`通过网关`10.0.0.1`路由: ```bash ip route add 192.168.1.0/24 via 10.0.0.1 table custom ``` 3. **创建策略规则** 使用`ip rule`命令创建规则。例如,创建一个规则,匹配源地址为`192.168.0.100`的数据,并使用自定义路由表`custom`: ```bash ip rule add from 192.168.0.100 table custom ``` 4. **刷新路由缓存**(如果需要) 使用`ip route flush cache`命令刷新路由缓存以使新规则生效。 ### 策略路由原理 策略路由的核心在于**多路由表**和**规则**: - **多路由表**:系统可以维护多个路由表,每个表含独立的路由条目。默认路由表是`main`(表254)和`local`(表255)。 - **规则**:规则定义了数据如何选择路由表。规则基于数据属性(如源地址、目的地址、TOS等)进行匹配,并指定使用哪个路由表。规则按优先级顺序处理,一旦匹配则使用对应的路由表进行路由查找。 ### 应用场景 - **负载分担**:将不同来源或目的的数据流量分配到不同的网络路径上。 - **安全监控**:将特定流量重定向到安全设备进行检测。 - **多出口环境**:根据源地址选择不同的出口(如企业多ISP出口)。 §§相关问题§§ 1. 策略路由与传统目的地址路由的主要区别是什么? 2. 在Linux中如何查看当前所有的策略规则? 3. 策略路由规则优先级是如何工作的? 4. 策略路由在哪些实际网络环境中应用广泛?</think>### 策略路由原理与配置详解 #### **一、策略路由原理** 策略路由(Policy-Based Routing, PBR)是一种基于数据属性(而非仅目的地址)的路由决策机制,其核心原理含两大关键组件: 1. **多路由表机制** Linux 内核默认维护多张路由表(如 `main`/`local`/`default`),每张表含独立的路由规则。通过 `ip route` 命令可管理不同表项[^1]。 $$ \text{路由决策} = f(\text{数据属性}, \text{路由表选择规则}) $$ 2. **规则匹配引擎** 策略规则(`ip rule`)按优先级扫描数据属性(源/目的 IP、协议、端口等),匹配成功则定向到指定路由表[^3]。规则优先级从低到高执行(0 最高)。 #### **二、Linux 配置方法** ##### 基础配置流程 ```bash # 1. 添加自定义路由(在 /etc/iproute2/rt_tables 添加) 100 custom_table # 2. 向自定义表添加路由 ip route add 192.168.1.0/24 via 10.0.0.1 dev eth0 table custom_table # 3. 创建匹配规则 (源IP匹配示例) ip rule add from 192.168.0.100 lookup custom_table priority 1000 # 4. 刷新路由缓存 ip route flush cache ``` ##### 典型场景配置 1. **双ISP负载均衡** ```bash # 创建两个路由表 ip route add default via ISP1_gw table isp1_table ip route add default via ISP2_gw table isp2_table # 按源IP段分流 ip rule add from 192.168.1.0/25 lookup isp1_table ip rule add from 192.168.1.128/25 lookup isp2_table ``` 2. **服务优先级路由** ```bash # 为SSH流量指定高质量路径 ip rule add tos 0x10 table premium_table # TOS字段匹配 ``` #### **三、关键技术点** 1. **规则优先级机制** - 系统内置规则优先级:`local`(0) > `main`(32766) > `default`(32767) - 自定义规则需设定优先级值(建议 1000-32000) 2. **数据匹配维度** | 属性 | 匹配命令示例 | |-------------|--------------------------------| | 源IP | `ip rule add from 192.168.0.0/24` | | 目的IP | `ip rule add to 8.8.8.8` | | 服务类型 | `ip rule add tos 0x04` | | 防火墙标记 | `ip rule add fwmark 0x1` | 3. **与防火墙联动** 结合 `iptables` 打标记实现应用层路由: ```bash iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1 ip rule add fwmark 1 table http_table ``` #### **四、应用场景** 1. **多宿主网络**:根据源IP选择不同ISP出口[^3] 2. **服务分级**:关键业务(如VoIP)走低延迟路径 3. **安全审计**:将可疑流量重定向到蜜罐系统 4. **云环境**:实现租户自定义路由策略 > 注:配置需 root 权限,持久化配置建议使用 `netplan` 或写入 `/etc/network/interfaces`[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值