Я пытаюсь создать vrf управления для устройства Linux (оно находится в Azure), которое находится на eth0, при этом используя eth1 и eth2 в качестве интерфейсов пересылки пакетов. Пока что, используя руководства Cumulus, я использую эту конфигурацию:
sudo ip link add mgmt-vrf type vrf table 10
ip link set dev mgmt-vrf up
ip route add table 10 unreachable default metric 4278198272
sudo ip link set dev eth0 master mgmt-vrf
sudo ip route add table 10 0.0.0.0/0 dev eth0 via 10.40.255.1
Я считаю, что это должно работать, и получаю разумный вывод:
ip -br link show vrf mgmt-vrf
eth0 UP 00:22:48:00:d4:8b <BROADCAST,MULTICAST,UP,LOWER_UP>
ip vrf show
Name Table
-----------------------
mgmt-vrf 10
когда я запускаю tcpdump, довольно очевидно, что SSH не отвечает:
sudo tcpdump -i eth0 !(port 80 or 53) -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:17:56.843175 IP 10.26.0.112.55756 > 10.40.255.4.22: Flags [S], seq 782432837, win 64960, options [nop,wscale 8,nop,nop,sackOK], length 0
11:17:58.011786 ARP, Request who-has 10.40.255.1 tell 10.40.255.4, length 28
11:17:58.012169 ARP, Reply 10.40.255.1 is-at 12:34:56:78:9a:bc, length 28
11:17:59.956102 IP 10.26.0.112.55756 > 10.40.255.4.22: Flags [S], seq 782432837, win 64960, options [nop,wscale 8,nop,nop,sackOK], length 0
11:18:05.845234 IP 10.26.0.112.55756 > 10.40.255.4.22: Flags [S], seq 782432837, win 64960, options [nop,wscale 8,nop,nop,sackOK], length 0
Поскольку Я понимаю, VRF не является сетевым пространством имен, поэтому я не могу запускать SSH в этом пространстве имен. также я запустил следующее:
sudo sysctl -w net.ipv4.tcp_l3mdev_accept=1
sudo sysctl -w net.ipv4.udp_l3mdev_accept=1
Но все равно без радости. Спасибо за помощь
ip -4 r ls table 10
unreachable default
10.26.0.0/21 via 10.40.255.1 dev eth0
broadcast 10.40.255.0 dev eth0 proto kernel scope link src 10.40.255.4
10.40.255.0/24 dev eth0 proto kernel scope link src 10.40.255.4
local 10.40.255.4 dev eth0 proto kernel scope host src 10.40.255.4
broadcast 10.40.255.255 dev eth0 proto kernel scope link src 10.40.255.4
ip route get 10.40.255.4 from 10.26.0.112 iif eth0
local 10.40.255.4 from 10.26.0.112 dev mgmt-vrf table 10
cache <local> iif eth0
ip route get 10.26.0.112 from 10.40.255.4
10.26.0.112 from 10.40.255.4 via 10.40.0.1 dev eth1 uid 1000
cache
ip route get 10.26.0.1 from 10.40.255.4 vrf mgmt-vrf
10.26.0.1 from 10.40.255.4 via 10.40.255.1 dev eth0 table 10 uid 1000
cache
Вдобавок tcpdump больше не разрешает IP-адрес хоста, и я не могу проверить связь с локальным интерфейсом, как если бы сервисы больше не были доступны в этом VRF, а команды sysctl mdev имели нет эффекта. Надеюсь, это поможет
спасибо за помощь. Мне удалось решить проблему.
У меня есть IPtables, настроенные на прием INPUT на интерфейсе eth0 mgmt-vrf согласно:
sudo iptables -L -v
136M ACCEPT all -- eth0 any anywhere anywhere
это ссылается на ведомое устройство, но здесь: https://www.kernel.org/doc/Documentation/networking/vrf.txt
Я обнаружил, что вам также нужно ссылаться на главное устройство, поэтому добавил правило
sudo iptables -A INPUT -i mgmt-vrf -j ACCEPT
Это исправлено проблема для меня
Спасибо за вашу помощь - помогли подтолкнуть меня в правильном направлении