Hello Robért,
BIRD basically doesn't set IP addresses to interfaces. This is a design
choice of the current team. Please use external tooling for this.
To elaborate a bit more, because we get these kinds of questions
repeatedly → Implementing of this feature would open a huge can of
worms, or a very large rabbithole (choose your best option) of features:
* setting tunnel endpoint IPs
* implementing DHCP client
* implementing VRRP
* creating and destroying tunnel interfaces
* setting interfaces up and down
* setting up wireguard links
* …
Yes, we could become another NetworkManager … and to be honest, I
sometimes wish to go this way when seeing how badly NM is handling some
specific corner cases. Anyway, it's a lot of work. A LOT of work. An
absurdly huge pile of hard work to get there.
Of course, if there is demand for this, and we are closely monitoring
what the users think and wish, we may rethink this design choice.
Thank you for your understanding
Maria
On 2023-10-24 17:29, Robért Guhr wrote:
Hi,
is it possible to set an ipv4 address (e.g. "10.186.100.11/32
<http://10.186.100.11/32>" ) via bird on a dummy interface called
"anycast"?
I mean via the bird config not via bgp/ospf pushes.
Background:
I have setup four DNS server in two sites. All these DNS servers
announces 10.186.100.11/32 <http://10.186.100.11/32> (and
10.186.100.12/32 <http://10.186.100.12/32>) up to the routers to
create an anycast environment.
Currently 10.186.100.11/32 <http://10.186.100.11/32> (and
10.186.100.12/32 <http://10.186.100.12/32>) are set fixed on the
dummy interface. Bird just imports these IP addresses.
We would like to use 10.186.100.11/32 <http://10.186.100.11/32>
and 10.186.100.12/32 <http://10.186.100.12/32> as resolver in
/etc/resolv.conf
But if we stop the local DNS server then the dns resolution is no
longer possible because the addresses are hardcoded on the local
interface and the other three dns server will not be used.
Idee was to set the ip addreses via bird so that when we stop Bird
and the local DNS server, we automatically forward the DNS
requests to the other three servers.
I was hoping the direct protocol converts a route also to an ip
address but this seems not to be the case.
With the kernel protocol I can export the route to the kernel routing
table but that is not was I was want.
pns-b2-ns02 ~ # cat /etc/bird.conf
# Ansible managed
router id 10.186.244.12;
protocol device {
scan time 10;
}
protocol direct {
ipv4 {
import none;
export all;
};
interface "anycast";
}
protocol static {
ipv4 {
import all;
export all;
};
route 10.186.100.11/32 <http://10.186.100.11/32> via "anycast";
}
protocol kernel {
ipv4 {
import none;
export all;
};
}
pns-b2-ns02 ~ # birdc show route; echo; ip a show dev anycast; echo;
ip r | grep 10.186.100
BIRD 2.13.1 ready.
Table master4:
10.186.100.11/32 <http://10.186.100.11/32> unicast [static1
17:22:18.282] * (200)
dev anycast
4: anycast: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UNKNOWN group default qlen 1000
link/ether 8e:b5:2b:bf:0d:5e brd ff:ff:ff:ff:ff:ff
inet 10.186.100.9/32 <http://10.186.100.9/32> scope global
noprefixroute anycast # <----- here should also be the
address 10.186.100.11/32 <http://10.186.100.11/32>
valid_lft forever preferred_lft forever
10.186.100.11 dev anycast proto bird scope link metric 32
Regards,
Robért
--
Maria Matejka (she/her) | BIRD Team Leader | CZ.NIC, z.s.p.o.