标签: policy-routing

基于策略的路由表实际上是如何工作的?

我对 Linux 中基于策略的路由的理解是,有三个主要组件,路由表、路由和规则。我遵循了许多指南,在每个指南中,这似乎都是正确的,因此我创建了一个路由表,向其中添加了一条路由,然后添加了一个规则,以使用该表来限定流量。

这对我来说似乎合乎逻辑,有一个规则列表,如果流量与规则匹配,它会查找路由表并告诉它如何到达目的地,但这似乎对我不起作用,我现在来了在许多其他文章中,在设置路由表后,主题然后将相同的路由添加到主路由表,我不确定为什么需要这样做,除非我对它的工作原理的理解是错误的,或者它不起作用。

这是来自Linux Advanced Routing & Traffic Control HOWTO的一个很好的例子,它有以下摘录(以防链接消失):

一个创建两个额外的路由表,比如 T1 和 T2。这些添加在 /etc/iproute2/rt_tables 中。然后在这些表中设置路由,如下所示:

ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
Run Code Online (Sandbox Code Playgroud)

没什么特别的,只需构建到网关的路由并通过该网关构建默认路由,就像在单个上游提供商的情况下所做的那样,但将每个提供商的路由放在单独的表中。请注意,网络路由就足够了,因为它告诉您如何查找该网络中的任何主机,其中包括上面指定的网关。

接下来设置主路由表。通过连接到该邻居的接口将事物路由到直接邻居是一个好主意。请注意“src”参数,它们确保选择了正确的传出 IP 地址。

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
Run Code Online (Sandbox Code Playgroud)

然后,您对默认路由的偏好:

ip route add …
Run Code Online (Sandbox Code Playgroud)

networking linux-networking policy-routing

7
推荐指数
1
解决办法
2788
查看次数

ip 规则和路由没有得到尊重

我正在尝试packets根据他们的进行路由source address,并添加了以下内容:

# ip rule add from 10.10.10.0/16 dev eth0 table foobar
# ip route add default via 100.100.100.1 dev eth0 table foobar
Run Code Online (Sandbox Code Playgroud)

然而,测试路由给了我错误的via地址:

# ip route get 4.3.2.1 from 10.10.10.1
4.3.2.1 from 10.10.10.1 via 100.0.0.1 dev eth0
Run Code Online (Sandbox Code Playgroud)

为什么这不被尊重?

这是我的常客 routes

# ip route list
default via 100.0.0.1 dev eth0
Run Code Online (Sandbox Code Playgroud)

# ip route show table foobar
default via 100.100.100.1 dev eth0
Run Code Online (Sandbox Code Playgroud)

# ip rule list
0:  from all lookup local
32765:  from …
Run Code Online (Sandbox Code Playgroud)

linux ip route ip-routing policy-routing

7
推荐指数
1
解决办法
2557
查看次数

多宿主 OpenBSD 系统:基于策略的路由与 mpath 默认路由

TL;DR 基于 OpenBSD 策略的路由对多宿主服务器/网关情况有帮助吗?如果是这样,我该如何配置它?

长表

我正在管理一个带有两个 ISP 链接和 VPN 隧道到远程路由节点的 OpenBSD。

最初,我们使用了多个具有不同指标的默认路由——通过静态 IP 地址的首选路由是 NAT 路由器,而 NAT 路由器又动态分配了地址(它基本上是一个电缆调制解调器)。

在实践中,这并不理想,但效果很好。从网关(以下简称为“gw”)建立的新连接,如果已启动,将选择速度更快、延迟更低的路由;如果链路断开,则通过电缆调制解调器出去。入站连接只能通过更好的路由,因为其他 IP 地址在 NAT 之后(无法从外部路由。

现在,我们需要通过一个额外的代理/VPN 路由器节点将流量路由到“云端”,以降低我们静态 IP 地址上的 DDoS 风险。

那些通过隧道连接到网关。

第一的。然后我们发现我们的管理员访问权限会偶尔下降。

使问题进一步复杂化的是,该网关具有到特定 VLAN 的额外活动接口。他们与这个问题无关,但不能被打扰。

可能的解决方案

我的印象是我们应该使用基于策略的路由rdomains。我想这意味着我为三个涉及的接口中的每一个创建路由表,并且任何这些接口(包括tun0隧道接口)上的任何连接都应该通过该域的表进行路由(因此每个都可以有自己的默认路由)。

我在正确的轨道上吗?

这是一个图表和一个清理列表,如果接口设置:

 ________
| 隧道| _______
 ~~~+~~~~ | GW |======++
    | ~+~+~+~ ||                   
    | _________ | | | ||                                        
    +-----| prefISP |------------+ | | __||____ ... ...               
           ~~~~~~~w~ | +-----| 交换机 |-----( 集群 )                           
                                    | ~~~~~~~~ ^^^^^^^^^           
           _________ .....|...... || …

routing openbsd multi-homed policy-routing

6
推荐指数
1
解决办法
1452
查看次数

将 IP 数据包转发到隧道设备

我已经使用创建了一个隧道设备

ip tuntap 添加 dev tun0 模式 tun 用户 0 组 0

然后我给它分配一个 ip 地址 192.168.0.1/22

ifconfig tun0 192.168.0.1 网络掩码 255.255.252.0

在我的以太网设备 eth0 上,我从 IP 地址范围 192.168.1.2-192.168.1.5 中的机器接收数据包。我希望这些数据包在隧道设备上转发。我不希望在以太网和隧道设备之间建立桥梁。因此,我在路由表中添加了路由条目,如下所示。

ip 规则添加从 192.168.1.0/24 查找 myinternal

ip route add default via 192.168.0.1 dev tun0 table myinternal

我已刷新(删除)所有 ip 表条目。但是有两个条目

iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT

iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

当我在 tun0 上执行 tcpdump 时,我看不到来自 eth0 的数据包。但是,当我在 eth0 上执行 tcpdump 时,我可以看到数据包。我想知道如何在 tun0 上转发/捕获这些数据包。从 tun0 以后,我想处理这些数据包并从我的应用程序回复它们,如果需要,将它们传递到另一个接口。我无法将 eth0 …

forwarding ip-routing tun policy-routing tunnel

5
推荐指数
0
解决办法
1516
查看次数

如何将 openvpn 配置为仅为绑定到 tun 接口的进程代理流量?

我正在尝试配置 openvpn,以便只有来自某些进程的流量通过 vpn,但这些进程可以连接到任何地方。

我试图通过让 openvpn 不进行任何路由配置 ( --route-noexec) 并让应用程序显式连接到 tun 接口(例如:curl --interface tun0 'http://www.ipchicken.com')来做到这一点,但connect()似乎超时。

为了使 tun 界面满意,我还需要做什么其他步骤吗?

linux iptables openvpn tun policy-routing

5
推荐指数
1
解决办法
5601
查看次数

在多组 ISP 之间迁移时克服非对称路由

我们正在从一组地址迁移到另一组地址,均为 /24,并尝试将迁移期间的任何停机时间降至最低。理想情况下,当我们关闭旧电路时,我们会同时运行一段时间。共有 4 个 Internet 连接,每对都运行 BGP。

然后将其中的每一个路由到 Cisco ASA,该 ASA 连接到交换机,该交换机在该子网上连接了多个服务器。

网络图

在上图中,左侧部分是今天存在的部分,我希望添加右侧部分。

我已经连接了 ASA 并且它们都在 10.20.20.0/24 子网上,第一个 ASA 接口为 10.20.20.1,第二个 ASA 接口为 10.20.20.254。

这里的问题是所有服务器都将 10.20.20.1 作为默认路由,我真的很想将流量路由回它进来的方式。也就是说,互联网 -> ASA #2 -> 服务器 -> 返回ASA #2。当然,就像今天一样,它将响应发送回 ASA #1,并且没有找到它的翻译。

我会以错误的方式解决这个问题吗?

编辑:我应该提到外 #1 和外 #2 有不同的公共 /24 网络。我们正在从 ISP 提供的块迁移到我们自己的块。

routing bgp cisco-asa policy-routing

5
推荐指数
1
解决办法
363
查看次数

3 WAN 和 Cisco 路由器 - PBR、QOS、负载平衡

我有一个带有 4 个以太网接口的 cisco 路由器,场景如下:

2 x 专用租用线路(2MB 和 4MB) 1 x 商务类 DSL 10MB

4 3COM L2,交换机,连接到核心交换机(3COM - 第 2 层)

核心交换机连接到 Cisco 路由器上的 1 个以太网接口

我现在的任务是配置负载平衡,以便我们的 LAN 用户可以利用所有 3 个 WAN 连接

谷歌搜索结果表明,我必须在服务提供商之间/与服务提供商之间使用 BGP(不可能)

问题是:

a) 如果我不能使用 BGP,我是否必须使用基于策略的路由 (PBR) 或者考虑到上述场景和 cisco 路由器 3700 系列,还有其他解决方案吗?

b) 另外,在这种情况下我将如何启用 QOS/流量监管?这是否适用于每个接口或全局 - 任何配置示例真的会很有帮助吗?

c) PBR 不是负载均衡?对 ?(我的理解是,它只是按照配置从一个接口路由一组 IP 地址,从另一个接口路由其他接口?

将不胜感激您的建议和帮助

感谢致敬

cisco qos policy-routing

4
推荐指数
1
解决办法
5529
查看次数

Ping 在带网桥的 TAP 接口上不起作用

我正在尝试了解 linux 桥接和本地 ip 规则,

我的 linux 笔记本电脑上有以下拓扑。

               br0 
     ___________|__________
     |                    |    
  |tap0                  tap1|
  |________Application_______| 
Run Code Online (Sandbox Code Playgroud)

上面的应用程序正在创建 2 个 tap 接口 tap0 和 tap1

我创建了桥接器并将抽头接口插入桥接器:

brctl addif br0 tap0
brctl addif br0 tap1
Run Code Online (Sandbox Code Playgroud)

为了 ping 工作,我需要向接口添加 ip 地址,所以我添加192.168.13.1 to tap0192.168.13.2 to tap1

对于这两个接口,应用程序从一个接口读取并写入另一个接口。

现在,如果我运行“ping 192.168.13.2 -I tap0”

PING 192.168.13.2 (192.168.13.2) from 192.168.13.1 tap0: 56(84) bytes of data.
From 192.168.13.1 icmp_seq=1 Destination Host Unreachable
Run Code Online (Sandbox Code Playgroud)

tcpdump 显示 arp 无法解析,所以我添加了静态 ARP 条目:

arp -i tap0 -s 192.168.13.1 62:34:58:e7:8a:3a
arp -i tap1 …
Run Code Online (Sandbox Code Playgroud)

linux routing bridge iproute2 policy-routing

2
推荐指数
1
解决办法
2512
查看次数