LINUX.ORG.RU
ФорумAdmin

Как из namespace экспортировать full view не производя запись в таблицу маршрутизации внутри netns

 , , , ,


0

1

Имеем около 80 chroot'ов, которые раскиданны по netns. В каждом chroot поднят ebgp линк с провайдером. Задача состоит в том, чтобы при full view не писался в таблицу маршрутизации самого netns, так как в среднем full view занимает довольно много места в оперативной памяти бордера.

★★★★★

Последнее исправление: ne-vlezay (всего исправлений: 1)

Используй фильты для ограничения префиксов,если у тя 1 аплинк то смылка от ФУЛ нет никакого принимай только дефолт(опятьже можно попросить прова давать только дефолт а можно самому зафильтровать до дефолта).

anonymous
()

в упор не могу вспомнить тему на наге, но месяца 2 назад была у человека ситуация где он просил как не кидать маршруты в основную таблицу, а только раскидывать их на дочерние роутеры.

InventoR
()

В каждом chroot поднят ebgp линк с провайдером

На quagga такое ИМХО нереально, юзай bird - там так можно

Pinkbyte ★★★★★
()
Ответ на: комментарий от ne-vlezay

Мне хватило официальной документации, чтобы поднять конфигу с 2 OSPF-процессами и 2 таблицами маршрутизации(помимо основной). Что характерно - многие точки трафика, имеющие дело с софтроутингом перешли на bird с quagga.

Потому что в quagga есть много ограничений. Например нельзя рулить куда писать маршруты. В bird можно через pipe хоть в 100500 таблиц маршрутизации писать маршруты, причем выборочно, с фильтрами.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

тогда и от велосипеда с netns можно отказаться. Будет возможность - буду осваивать bird

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte

Мне хватило официальной документации, чтобы поднять конфигу с 2 OSPF-процессами и 2 таблицами маршрутизации(помимо основной).

А если тебе надо будет настроить бордер, и ты забудешь того, что есть в документации. Тогда чтоделать? Ведь от бордера идет интернет.

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay

А если тебе надо будет настроить бордер, и ты забудешь того, что есть в документации. Ведь от бордера идет интернет.

Комментарии в конфиге? Документация лежащая в оффлайне?

Не, ну если ты сильный духом и настраиваешь бордер СНАРУЖИ без запасного интернет-канала, то я искренне желаю тебе удачи не выстрелить себе в ногу

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от ne-vlezay

Например так:

filter examplefilter {
if net = 222.222.222.0/24 then accept;
}

protocol bgp examplename {
router id 111.111.111.111;
local as 65000;
neighbor 111.111.111.112 as 65002;
next hop self;
export examplefilter;
}

В данном примере мы забираем с BGP все маршруты в таблицу маршрутизацию по умолчанию, а отправляем только префикс 222.222.222.0/24

А вообще ты бы не задавал такие вопросы, если бы почитал примеры из официальной wiki

Там и BGP, и OSPF, и множественные таблицы маршрутизации, и самые упоротые фильтры, какие только можно придумать

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Pinkbyte

У меня такая хрень:

Jun 11 20:46:22 router systemd[1]: Unit bird.service entered failed state.
Jun 11 20:46:52 router bird[2805]: /etc/bird/bird.conf, line 20: syntax error
Jun 11 20:46:52 router bird[2805]: bird: /etc/bird/bird.conf, line 20: syntax error
Jun 11 20:46:52 router systemd[1]: bird.service: control process exited, code=exited status=1
Jun 11 20:46:52 router systemd[1]: Failed to start BIRD Internet Routing Daemon (IPv4).

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte
/*
 *	This is an example configuration file.
 */

# Yes, even shell-like comments work...

# Configure logging
#log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };
#log stderr all;
#log "tmp" all;

# Override router ID
router id 10.247.0.4;

# You can define your own symbols...
#define xyzzy = (120+10);
#define '1a-a1' = (30+40);

# Define a route filter...
filter net {
if net = 222.222.222.0/24 then accept;
}

#filter sink { reject; }
#filter net { accept; }

#include "filters.conf";

# Define another routing table
table routers;

# Turn on global debugging of all protocols
#debug protocols all;

# The direct protocol automatically generates device routes to
# all network interfaces. Can exist in as many instances as you wish
# if you want to populate multiple routing tables with device routes.
protocol direct {
	interface "-eth*", "*";	# Restrict network interfaces it works with
}

# This pseudo-protocol performs synchronization between BIRD's routing
# tables and the kernel. If your kernel supports multiple routing tables
# (as Linux 2.2.x does), you can run multiple instances of the kernel
# protocol and synchronize different kernel tables with different BIRD tables.
protocol kernel {
	learn;			# Learn all alien routes from the kernel
	persist;		# Don't remove routes on bird shutdown
	scan time 20;		# Scan kernel routing table every 20 seconds
	import none;		# Default is import all
	export all;		# Default is export none
	kernel table 254;		# Kernel table to synchronize with (default: main)
}

#protocol kernel {
#	table routers;
#        learn;                  # Learn all alien routes from the kernel
#        persist;                # Don't remove routes on bird shutdown
#        scan time 20;           # Scan kernel routing table every 20 seconds
#        import none;            # Default is import all
#        export all;             # Default is export none
#        kernel table 254;               # Kernel table to synchronize with (default: main)
#}


# This pseudo-protocol watches all interface up/down events.
protocol device {
	scan time 10;		# Scan interfaces every 10 seconds
}

# Static routes (again, there can be multiple instances, so that you
# can disable/enable various groups of static routes on the fly).
protocol static {
#	disabled;		# Disable by default
#	table testable;		# Connect to a non-default table
#	preference 1000;	# Default preference of routes
	debug { states, routes, filters, interfaces, events, packets };
	debug all;
#	route 0.0.0.0/0 via 198.51.100.13;
#	route 198.51.100.0/25 unreachable;
#	route 10.0.0.0/8 unreachable;
#	route 10.1.1.0:255.255.255.0 via 198.51.100.3;
#	route 10.1.2.0:255.255.255.0 via 198.51.100.3;
#	route 10.1.3.0:255.255.255.0 via 198.51.100.4;
#	route 10.2.0.0/24 via "arc0";
#        route 10.194.0.0/16 unreachable;
	route 10.194.0.0/24 via 192.168.222.2;
	route 10.194.1.0/24 via 192.168.222.3;
	route 10.194.2.0/24 via 192.168.222.4;
	route 10.194.3.0/24 via 192.168.222.5;
	route 10.194.240.0/20 via 192.168.222.4;
}

protocol static {
	table routers;
        route 10.194.0.0/16 unreachable;
}
# Pipe protocol connects two routing tables... Beware of loops.
#protocol pipe {
#	peer table main;
# Define what routes do we export to this protocol / import from it.
#	import all;		# default is all
#	export all;		# default is none
#	import none;		# If you wish to disable imports
#	import filter test_filter;		# Use named filter
#	import where source = RTS_DEVICE;	# Use explicit filter
#}

# RIP aka Rest In Pieces...
#protocol rip MyRIP {	# You can also use an explicit name
#	preference xyzzy;
#	debug all;
#	port 1520;
#	period 7;
#	infinity 16;
#	garbage time 60;
#	interface "*" { mode broadcast; };
#	honor neighbor;		# To whom do we agree to send the routing table
#	honor always;
#	honor never;
#	passwords {
#		password "nazdar";
#	};
#	authentication none;
#	import filter { print "importing"; accept; };
#	export filter { print "exporting"; accept; };
#}

#protocol ospf MyOSPF {
#       tick 2;
#	rfc1583compat yes;
#	area 0.0.0.0 {
#		stub no;
#		interface "eth*" {
#			hello 9;
#			retransmit 6;
#			cost 10;
#			transmit delay 5;
#			dead count 5;
#			wait 50;
#			type broadcast;
#			authentication simple;
#			password "pass";
#		};
#		interface "arc0" {
#			rx buffer large;
#			type nonbroadcast;
#			poll 14;
#			dead 75;
#			neighbors {
#				10.1.1.2 eligible;
#				10.1.1.4;
#			};
#			strict nonbroadcast yes;
#		};
#		interface "xxx0" {
#                       passwords {
#				password "abc" {
#					id 1;
#					generate to "22-04-2003 11:00:06";
#					accept to "17-01-2004 12:01:05";
#				};
#				password "def" {
#					id 2;
#					generate from "22-04-2003 11:00:07";
#					accept from "17-01-2003 12:01:05";
#				};
#			};
#                       authentication cryptographic;
#		};
#	};
#	area 20 {
#		stub 1;
#		interface "ppp1" {
#			hello 8;
#			authentication none;
#		};
#               interface "fr*";
#               virtual link 192.168.0.1 {
#                       password "sdsdffsdfg";
#                       authentication cryptographic;
#               };
#	};
#}
		

protocol bgp {
#	disabled;
#	description "My BGP uplink";
#	table routers;
	local as 65301;
	neighbor 10.247.0.1 as 65500;
#	multihop;
#	hold time 240;
#	startup hold time 240;
#	connect retry time 120;
#	keepalive time 80;	# defaults to hold time / 3
#	start delay time 5;	# How long do we wait before initial connect
#	error wait time 60, 300;# Minimum and maximum time we wait after an error (when consecutive
#				# errors occur, we increase the delay exponentially ...
#	error forget time 300;	# ... until this timeout expires)
#	disable after error;	# Disable the protocol automatically when an error occurs
#	next hop self;		# Disable next hop processing and always advertise our local address as nexthop
#	path metric 1;		# Prefer routes with shorter paths (like Cisco does)
#	default bgp_med 0;	# MED value we use for comparison when none is defined
#	default bgp_local_pref 0;	# The same for local preference
#	source address 198.51.100.14;	# What local address we use for the TCP connection
#	password "secret";	# Password used for MD5 authentication
#	rr client;		# I am a route reflector and the neighor is my client
#	rr cluster id 1.0.0.1;	# Use this value for cluster id instead of my router id 
	export net;
#	export filter {
#		if source = RTS_STATIC then {
#			bgp_community = -empty-; bgp_community = add(bgp_community,(65000,5678));
#			bgp_origin = 0;
#			bgp_community = -empty-; bgp_community.add((65000,5678));
#			if (65000,64501) ~ bgp_community then
#				bgp_community.add((0, 1));
#			if bgp_path ~ [= 65000 =] then
#				bgp_path.prepend(65000);
#			accept;
#		}
#		reject;
#	};
}
# 
# Template usage example
#template bgp rr_client {
#	disabled;
#	local as 65000;
#	multihop;
#	rr client;
#	rr cluster id 1.0.0.1;
#}
#
#protocol bgp rr_abcd from rr_client {
#	neighbor 10.1.4.7 as 65000;
#}

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte

Pinkbyte, разобрался. Ты мне дал неправильный синтекс. Вот правильный:

filter examplefilter {
if net = 222.222.222.0/24 then accept;
}

protocol bgp examplename {
router id 111.111.111.111;
local as 65000;
neighbor 111.111.111.112 as 65002;
next hop self;
export filter examplefilter;
}
В Bird кстати, конфиг очень хорошо прокаминтирован. Осталось теперь эти параметры выучить на изусть, чтобы можно было сразу приступить к конфигурации при нахождении вдали от интернета.

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte

Pinkbyte, правда bird6 у меня почиму-то конфиг с neighbor 10.247.0.1 as 65500;. Но, когда я прописал neighbor в ipv6 он спокойно запустился. Соответствинно, пришлось просить админа прописать на RS ipv6 neighbor

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte

В bird можно через pipe хоть в 100500 таблиц маршрутизации писать маршруты, причем выборочно, с фильтрами.

/etc/bird/bird.conf, line 67: Kernel routing table number out of range
ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay

Ну так ты не путай внутренние таблицы bird и их отображение на таблицы маршрутизации ядра

Таблиц самого bird может быть 32 тысячи, в то время как ядерных - дохрена и больше(загугли подробнее сколько, если интересно)

Pinkbyte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.