Я пытаюсь настроить туннель 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 ответ
В тот момент, когда ваш хост принимает соответствующее решение о маршрутизации, входной интерфейс (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
жаворонки