Маршрутизация трафика KVM VM через wireguard от ОС хоста

Я пытаюсь настроить туннель Wireguard на моей хост-ОС и направить весь сетевой трафик с определенной виртуальной машины KVM через эту Wireguard VPN. Мои виртуальные машины KVM настроены с использованием сетевых мостов. Имя интерфейса в операционной системе хоста конкретной виртуальной машины, которую я хочу маршрутизировать через VPN, — «viifv1424». Вот команды, которые я запускал, чтобы попытаться добиться этого, но кажется, что виртуальная машина просто маршрутизируется как обычно, а не маршрутизируется через VPN:

Это именно те команды, которые я запускал. Имя интерфейса виртуальной машины — viifv1424, а интерфейс wireguard — wg_viifv1424.

#Setup fireguard tunnel
ip link add dev wg_viifv1424 type wireguard
wg setconf wg_viifv1424 /etc/wireguard/wg_viifv1424.conf

#routing table
ip link set dev wg_viifv1424 up
ip route add default dev wg_viifv1424 table 100
ip rule add iif viifv1424 table 100

#iptables rules
iptables -t nat -A POSTROUTING -o wg_viifv1424 -j MASQUERADE
iptables -A FORWARD -i viifv1424 -o wg_viifv1424 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i viifv1424 -o wg_viifv1424 -j ACCEPT

Содержимое wg_viifv1424.conf:

[Interface]
PrivateKey = XXXXXXX
[Peer]
PublicKey = XXXXXXX
AllowedIPs = 0.0.0.0/0,::0/0
Endpoint = 1.2.3.4:51820

Что я делаю неправильно и как я могу этого добиться?

1 ответ
1

В тот момент, когда ваш хост принимает соответствующее решение о маршрутизации, входной интерфейс (iif в вашем правиле) это мостовое устройство, а не viifv1424.

Пример настройки

В моей системе я запускаю типичную настройку libvirt. у меня есть сеть default связанный с мостовым устройством virbr0. Если я создаю виртуальную машину в этой сети, виртуальная машина подключается к виртуальному интерфейсу. vnet0.

У меня есть интерфейс wireguard, настроенный как wg0с адресом 192.168.64.14.

Правила, которые не работают

Если я настрою эквивалент ваших правил:

ip route add default dev wg0 table 100
ip rule add prio 100 iif vnet0 table 100
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

А затем попытаться ping 8.8.8.8я вижу, что эхо-запрос выходит из интерфейса хоста по умолчанию.

Правила, которые работают

Если вместо этого я настрою правило политики с интерфейсом моста в качестве входного интерфейса:

ip route add default dev wg0 table 100
ip rule add prio 100 iif virbr0 table 100
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

Затем я вижу, что запрос уходит wg0 по желанию. Бег tcpdump -i wg0 -n Я понимаю:

19:05:19.217001 IP 192.168.64.14 > 8.8.8.8: ICMP echo request, id 26, seq 1, length 64
19:05:19.274453 IP 8.8.8.8 > 192.168.64.14: ICMP echo reply, id 26, seq 1, length 64

жаворонки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *