Freifunk-BGP-Gateway: Unterschied zwischen den Versionen

Aus Freifunk Franken
Wechseln zu:Navigation, Suche
Zeile 107: Zeile 107:


== Babel ==
== Babel ==
=== Babel config ===
Die Babelconfig sollte so aussehen:
<pre>
[...]
redistribute local ip 10.50.0.0/16
redistribute local ip 10.83.0.0/16
redistribute local ip fd43:5602:29bd::/48
redistribute local ip OWN_IP_SUBNET # eigenes Public Subnetz
redistribute local deny
redistribute ip 10.50.0.0/16
redistribute ip 10.83.0.0/16
redistribute ip fd43:5602:29bd::/48
redistribute ip ::/0
[...]
</pre>

Version vom 19. November 2017, 16:49 Uhr

In dieser Anleitung geht es darum, wie man BGP (hier mit Bird) spricht und diese Routen ins Layer 3 (Babel) Freifunknetz verteilt.

Das ganze ist alles noch im Aufbau und die Anleitung ist auch den ersten Livesystem entstanden. Es kann durchaus sein, das hier noch viel Optimierungspotential vorhanden ist.

Grundlegendes

Routing im Linux aktivieren Alle Partner die im Babel das v6 Netz mit rumschubsen wollen, müssen folgende Config auf den genutzen GRE Tunnels aktivieren: https://wiki.freifunk-franken.de/mediawiki/index.php?title=Freifunk-Gateway_aufsetzen&curid=536&diff=9745&oldid=9608

Bird installieren und einrichten

Zuerst installieren wir bird:

apt-get install bird

Peering Interfaces

Zudem muss ein Partner vorhanden sein, mit dem man Bird sprechen kann. In dieser Beispielconfig ist es Hurricane Electric per Tunnel worüber es auch Transit gibt und ein privates Peering über einen GRE Tunnel.

HE Tunnel

auto he-ipv6
iface he-ipv6 inet6 static
	address EIGENE-IPv6_TUNNEL_IP/64
	pre-up ip tunnel add $IFACE mode sit remote HE-IPV4 local EIGENE-IPv4 ttl 255

	post-down ip tunnel del $IFACE

Privates Peering

(Beispiel, am Ende muss zusammen ausgehandelt werden wie man peert)

auto cd-bgp
iface cd-bgp inet6 static
	address EIGENE-IPv6_TUNNEL_IP/64
	pre-up ip tunnel add $IFACE mode ip6gre remote PARTNER-PUBLIC-IP local EIGENE_PUBLIC_IP ttl 255
	post-down ip tunnel del $IFACE

#       --------
#      /|_| |_| \       o
#     |         |   o
#      --O---O--==

Bird config

Dies ist nur eine funktionierende Beispielconfig:

router id x.x.x.x; #z.b. eigene IPv4 Adresse

protocol kernel {
#	learn;
	scan time 25;
	device routes;
	import all;
	export all;
	kernel table 100;
}

protocol device {
	scan time 15;
}

protocol static {
	import all;
	route  v6Subnetz/48 via "INTERFACE"; #v6Subnetz/48 durch das eigene Subnetz und Interface durch das Peering Interface ersetzen
}


function network_he() { 
 return net ~ [ 
    v6Subnetz/48  #v6Subnetz/48 durch das eigene Subnetz ersetzen
 ]; 
}


protocol bgp WÄHLBARER_NAME {
	local as OWNAS;
	source address OWN_PEERING_IP;
	neighbor NEIGHBOR_IP as NEIGHBOR_AS;
	import all;
	export filter { 
		# here we export the whole net 
		if network_he() then { 
			accept; 
		} 
	reject; 
	};

}


protocol bgp cd {
	local as OWNAS;
	source address OWN_PEERING_IP;
	neighbor NEIGHBOR_IP as NEIGHBOR_AS;
	import all;
	export filter { 
		# here we export the whole net 
		if network_he() then { 
			accept; 
		} 
	reject; 
	};

}

Babel

Babel config

Die Babelconfig sollte so aussehen:

[...]
redistribute local ip 10.50.0.0/16
redistribute local ip 10.83.0.0/16
redistribute local ip fd43:5602:29bd::/48
redistribute local ip OWN_IP_SUBNET # eigenes Public Subnetz
redistribute local deny
redistribute ip 10.50.0.0/16
redistribute ip 10.83.0.0/16
redistribute ip fd43:5602:29bd::/48
redistribute ip ::/0
[...]