我有一个来自 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。我可以在 Provider A Server tcpdump 上看到 ICMP 数据包,但在 pfSense tcpdump 上看不到。我允许防火墙,但我看不到任何被阻止的日志。通过位于 pfSense 和提供商 A 之间的 GRE 隧道的所有端点流量。
如果我使用 Provider B Server 进行 ping,那也不起作用。但是,如果我在提供程序 A 之间使用 GRE 接口 IP 进行 ping 操作,即使没有 NAT 也可以。
当然,当我在 Provider A 附近执行 ping 操作时,我可以 ping 到 Endpoint。
什么有效(本身意味着提供者的服务器):
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
如果需要更多信息,请告诉我。谢谢。
现在它解决了。在这些网关上禁用 rp_filter 后,数据包得到了正确处理。