![使用 BIRD 进行互联网路由](https://linux22.com/image/619480/%E4%BD%BF%E7%94%A8%20BIRD%20%E8%BF%9B%E8%A1%8C%E4%BA%92%E8%81%94%E7%BD%91%E8%B7%AF%E7%94%B1.png)
我正在测试 BIRD 投入生产以替换我用于路由到我的 AWS 站点的几个 VPN 设备。我以前从未使用过 BIRD,所以请原谅我的无知/如果我将一台测试 Windows 机器放在此路由服务器后面,我能够在本地路由到我的亚马逊网络和其他网络,但是我无法路由到互联网。
我可以在我的 BIRD 路由表中看到 0.0.0.0/0 的条目
bird> show route
0.0.0.0/0 via 204.244.x.x on eth1 [kernel1 15:03] * (10)
172.30.0.176/28 dev eth0 [static1 15:07] ! (200)
192.168.120.0/23 via 204.244.x.x on eth1 [R1 15:03 from 10.0.0.241] * (100/?) [AS7224i]
172.31.5.80/29 dev eth0 [static1 15:07] ! (200)
这是否会导致从使用路由器作为默认网关的 172.30.0.176/28 网络中的服务器路由到互联网时出现问题?如果是这样,我该如何更改路由,以便 BIRD 不会尝试路由互联网流量,而只路由内部网络的流量?
以下是我的配置:
客户端机器:IP 172.30.0.188/28 网关 172.30.0.190
BIRD 配置:
# Configure logging
log syslog all;
log "/var/log/bird.log" all;
log stderr all;
# Override router ID
#router id 10.0.0.245;
function avoid_martians()
prefix set martians;
{
martians = [ 169.254.0.0/16+, 224.0.0.0/4+, 240.0.0.0/4+, 0.0.0.0/32-, 0.0.0.0/0{25,32}, 0.0.0.0/0{0,7} ];
# Avoid RFC1918 networks
if net ~ martians then return false;
return true;
}
function avoid_crappy_prefixes()
{
if net.len < 8 then return false;
if net.len > 24 then return false;
return true;
}
filter bgp_out
{
if net = 192.168.120.0/23 then accept;
else reject;
}
filter bgp_in {
if avoid_martians() && avoid_crappy_prefixes() then accept;
else reject;
}
# Sync bird routing table with kernel
protocol kernel {
learn;
persist;
scan time 20;
export all;
}
# Include device route (warning, a device route is a /32)
protocol device {
scan time 10;
}
protocol static {
route 172.30.0.176/28 via "eth0";
route 172.31.5.80/29 via "eth0";
}
protocol bgp R1 {
local as 65200;
neighbor 10.0.0.241 as 65100;
multihop;
import filter bgp_in;
export filter bgp_out;
}
路由器接口配置
# The loopback network interface
auto lo
iface lo inet loopback
# Internal Network
auto eth0
iface eth0 inet static
address 172.30.0.190
netmask 255.255.255.240
# External Network
auto eth1
iface eth1 inet static
address 204.244.x.x
netmask 255.255.255.128
gateway 204.244.x.y
# BGP Router IP
auto eth1:1
iface eth1:1 inet static
address 10.0.0.245
netmask 255.255.255.252
# DAG Network IP
auto eth0:1
iface eth0:1 inet static
address 172.29.0.126
netmask 255.255.255.240
# Test network IP
auto eth0:2
iface eth0:2 inet static
address 172.31.5.81
netmask 255.255.255.248
答案1
我设法解决了我的问题。这里的问题是一个 NAT 问题。路由器将流量传递到互联网,不是通过路由器的公共 IP,而是通过机器的内部 IP,这显然是它无法工作的原因。通过为网络添加 NAT 规则,我解决了这个问题。