我有一个来自 RIR 的 IP 块。
我使用两个提供商向“某些” IP 进行任播。我将其称为 A 和 B。
当该 IP 不在该位置时,我想转发到其他提供商。我使用两台 Ubuntu 服务器来 BGP 通告和转发数据包,并在提供商 A 和单播端点之间使用一台 pfSense 机器。
任播 IP 效果很好。但是,如果客户端靠近提供商 B,则该数据包无法到达端点。
配置方式如下:
Client --> Provider B -(GRE, Static Route)-> Provider A -(GRE, Static Route)-> pfSense --> Endpoint
^ Here is problem
确切的问题是数据包未从提供商 A 转发到 pfSense。我可以在提供商 A 服务器 tcpdump 上看到 ICMP 数据包,但在 pfSense tcpdump 上看不到。我允许防火墙,但我看不到任何被阻止的日志。所有端点流量都通过位于 pfSense 和提供商 A 之间的 GRE 隧道。
如果我使用提供商 B 服务器执行 ping 操作,则同样不起作用。但是,如果我使用提供商 A 之间的 GRE 接口 IP 执行 ping 操作,则即使没有 NAT 也可以正常工作。
当然,当我在提供商 A 附近执行 ping 操作时,我可以 ping 到端点。
什么有效(本身意味着提供商的服务器):
Client(or itself) --> Provider A or B -(GRE, Static Route)-> pfSense -(GRE, Static Route)-> Anycast IP
Client(or itself) --> Provider A -(GRE, Static Route)-> pfSense -(GRE, Static Route)-> Unicast IP at near Provider A
Provider B -(GRE, Static Route, GRE IP or same subnet IP excluding Anycasted)-> pfSense -(GRE, Static Route)-> Unicast IP at near Provider A
Unicast IP at near Provider A --> pfSense -(GRE, Static Route)-> Provider A
Provider B --> Server near Provider B
不起作用的:
Client(or itself) --> Provider B -(GRE, Static Route)-> Provider A -(GRE, Static Route, Traffic stops here)-> pfSense -(GRE, Static Route)-> Unicast IP at near Provider A
Unicast IP at near Provider A --> pfSense -(GRE, Static Route)-> Provider B --> Server near Provider B --> Provider B --> Provider A -(Traffic stops here)-> pfSense --> Endpoint
结果如下sysctl -p
:
Provider A
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 1
net.ipv6.conf.all.accept_redirects = 1
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.all.accept_source_route = 1
net.ipv6.conf.all.accept_source_route = 1
net.ipv6.conf.all.accept_ra = 2
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
Provider B
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 1
net.ipv6.conf.all.accept_redirects = 1
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.all.accept_source_route = 1
net.ipv6.conf.all.accept_source_route = 1
如果需要更多信息,请告诉我。谢谢。
答案1
现在问题解决了。在我禁用这些网关上的 rp_filter 后,数据包可以正常处理。