我对 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) 我正在尝试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) TL;DR 基于 OpenBSD 策略的路由对多宿主服务器/网关情况有帮助吗?如果是这样,我该如何配置它?
长表
我正在管理一个带有两个 ISP 链接和 VPN 隧道到远程路由节点的 OpenBSD。
最初,我们使用了多个具有不同指标的默认路由——通过静态 IP 地址的首选路由是 NAT 路由器,而 NAT 路由器又动态分配了地址(它基本上是一个电缆调制解调器)。
在实践中,这并不理想,但效果很好。从网关(以下简称为“gw”)建立的新连接,如果已启动,将选择速度更快、延迟更低的路由;如果链路断开,则通过电缆调制解调器出去。入站连接只能通过更好的路由,因为其他 IP 地址在 NAT 之后(无法从外部路由。
现在,我们需要通过一个额外的代理/VPN 路由器节点将流量路由到“云端”,以降低我们静态 IP 地址上的 DDoS 风险。
那些通过隧道连接到网关。
第一的。然后我们发现我们的管理员访问权限会偶尔下降。
使问题进一步复杂化的是,该网关具有到特定 VLAN 的额外活动接口。他们与这个问题无关,但不能被打扰。
可能的解决方案
我的印象是我们应该使用基于策略的路由rdomains。我想这意味着我为三个涉及的接口中的每一个创建路由表,并且任何这些接口(包括tun0隧道接口)上的任何连接都应该通过该域的表进行路由(因此每个都可以有自己的默认路由)。
我在正确的轨道上吗?
这是一个图表和一个清理列表,如果接口设置:
________ | 隧道| _______ ~~~+~~~~ | GW |======++ | ~+~+~+~ || | _________ | | | || +-----| prefISP |------------+ | | __||____ ... ... ~~~~~~~w~ | +-----| 交换机 |-----( 集群 ) | ~~~~~~~~ ^^^^^^^^^ _________ .....|...... || …
我已经使用创建了一个隧道设备
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 …
我正在尝试配置 openvpn,以便只有来自某些进程的流量通过 vpn,但这些进程可以连接到任何地方。
我试图通过让 openvpn 不进行任何路由配置 ( --route-noexec
) 并让应用程序显式连接到 tun 接口(例如:curl --interface tun0 'http://www.ipchicken.com'
)来做到这一点,但connect()
似乎超时。
为了使 tun 界面满意,我还需要做什么其他步骤吗?
我们正在从一组地址迁移到另一组地址,均为 /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 提供的块迁移到我们自己的块。
我有一个带有 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 地址,从另一个接口路由其他接口?
将不胜感激您的建议和帮助
感谢致敬
我正在尝试了解 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 tap0
和192.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 ×3
routing ×3
ip-routing ×2
tun ×2
bgp ×1
bridge ×1
cisco ×1
cisco-asa ×1
forwarding ×1
ip ×1
iproute2 ×1
iptables ×1
multi-homed ×1
networking ×1
openbsd ×1
openvpn ×1
qos ×1
route ×1
tunnel ×1