Linux
- База на xgu
- При настройке VRF в linux свой интерфейс в vrf не пингуется – это ок. Интерфейс в другом vrf при этом будет отвечать нашему. Можно интерфейсы соединить кабелем напрямую (в одной подсети, но разных vrf) или через промежуточный роутер (в разных подсетях) – без разницы.
- Настройки netns не перманентны (стираются после перезагрузки), чтобы сделать их перманентными нужно добавлять скрипты по настройке netns в автозагрузку
- Работа с netns с использованием python возможна как системными командами (subprocess), так и с использованием библиотеки pyroute2, подробнее в статье про python
Работа с vrf в Linux происходит с помощью ip netns (network namespaces).
Создание/удаление netns и просмотр:
ip netns add VRF1
ip netns add VRF2
ip netns delete VRF1
ip netns delete VRF2
ip netns ls
Перенос/удаление интерфейса в netns и просмотр:
ip link set eth2 netns VRF1
ip link set eth3 netns VRF2
ip netns exec VRF1 ip link set eth2 netns 1
ip netns exec VRF2 ip link set eth3 netns 1
ip netns exec VRF1 ip l
ip netns exec VRF2 ip l
Дальнейшая работа с интерфейсом (настройка адресации/маршрутизации/tcpdump/ping и любых других, например, isic) аналогична стандартной, просто в контексте vrf. Расписывать поэтому подробно не буду, только самое необходимое, что надо под рукой.
# CFG
ip netns exec VRF1 ifconfig eth2 172.16.0.2/24 up
ip netns exec VRF2 ifconfig eth3 172.20.0.2/24 up
ip netns exec VRF2 ifconfig eth1:1 172.20.0.3/24 up
ip netns exec VRF1 ip a add 172.16.0.2/24 dev enp2s0
ip netns exec VRF2 ip a add 172.17.0.2/24 dev enp3s0
ip netns exec VRF2 ip a add 172.17.0.3/24 dev enp3s0:1
ip netns exec VRF1 ip link set enp2s0 up
ip netns exec VRF2 ip link set enp3s0 up
ip netns exec VRF1 ip route add default via 172.16.0.1
ip netns exec VRF2 ip route add default via 172.17.0.1
ip netns exec VRF1 ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64
ip netns exec VRF2 ifconfig eth1 inet6 add 2001:0db8:0:f101::2/64
ip netns exec VRF1 ip -6 addr add 2001:0db8:0:f101::1/64 dev enp2s0
ip netns exec VRF2 ip -6 addr add 2001:0db8:0:f101::2/64 dev enp3s0
# SHOW
ip netns exec VRF2 ip a
ip netns exec VRF2 ip r
ip netns exec VRF2 ip n
ip netns exec VRF2 ip l
ip netns exec VRF2 ifconfig
ip netns exec VRF2 arp
ip netns exec VRF2 ethtool eth0
# NET UTILS
ip netns exec VRF2 ping 172.16.0.22
ip netns exec VRF1 ping6 2001:db8:0:f101::2
ip netns exec VRF2 tcpdump -nvvi eth1 icmp
cat sw | while read ip; do ip netns exec VRF1 fping $ip; done
ip netns exec VRF2 ./tcpsic -s 172.16.0.23,69 -d 172.16.0.22 -x 2 -m 1000 -T 30 -t 50
Если выдает “RTNETLINK answers: Network is unreachable”, то нужно поднять if.
Cisco
# VRF1
ip vrf t1
end
interface tenGigabitEthernet 1/0/1
ip vrf forwarding t1
ip address 172.17.0.2 255.255.255.0
ping vrf t1 172.17.0.1
ip route vrf t1 172.0.0.0 255.0.0.0 172.17.0.1
# VRF2
ip vrf t2
end
interface tenGigabitEthernet 1/0/1
ip vrf forwarding t2
ip address 172.18.0.2 255.255.255.0
ping vrf t2 172.18.0.1
ip route vrf t2 172.0.0.0 255.0.0.0 172.18.0.1
Huawei