Код: Выделить всё
virt-managerМой хост Debian использует прозрачный прокси, настроенный с помощью Xray и
Код: Выделить всё
nftablesПроблема, с которой я столкнулся, заключается в том, что сетевой трафик виртуальной машины, похоже, не может быть должным образом преобразован в NAT и/или маршрутизирован через настройку прозрачного прокси-сервера хоста. На основании предварительной оценки (от ИИ) правила прозрачного прокси могут мешать механизму NAT по умолчанию для пакетов виртуальной машины.
Мне нужен способ обеспечить трафик виртуальной машины:
- Правильно NAT с помощью libvirt (или аналогичного механизма).
- Затем успешно перенаправляется и обрабатывается прозрачным прокси-сервером Xray перед тем, как покинуть хост.
Файлы конфигурации прозрачного прокси
Вот соответствующие файлы для настройки моего прозрачного прокси:
[code]transparent_start.sh[/code]
Код: Выделить всё
#!/usr/bin/bash
# Stop previous instance first
/usr/local/etc/xray/transparent_stop.sh
# Set policy route v4
/usr/sbin/ip rule add fwmark 1 table 100
/usr/sbin/ip route add local 0.0.0.0/0 dev lo table 100
# Set policy route v6
/usr/sbin/ip -6 rule add fwmark 1 table 106
/usr/sbin/ip -6 route add local ::/0 dev lo table 106
# Set nftables rules
/usr/sbin/nft -f /usr/local/etc/xray/transparent_rules.nft
[code]transparent_stop.sh[/code]
Код: Выделить всё
#!/usr/bin/bash
# Remove policy route v4
/usr/sbin/ip rule del fwmark 1 table 100
/usr/sbin/ip route del local 0.0.0.0/0 dev lo table 100
# Remove policy route v6
/usr/sbin/ip -6 rule del fwmark 1 table 106
/usr/sbin/ip -6 route del local ::/0 dev lo table 106
# Destroy nftables table
/usr/sbin/nft destroy table inet xray
[code]transparent_rules.nft[/code]
Код: Выделить всё
#!/usr/sbin/nft -f
add table inet xray {
chain prerouting {
type filter hook prerouting priority filter; policy accept;
# Exclusions
ip daddr { 127.0.0.0/8, 224.0.0.0/4, 255.255.255.255 } return
meta l4proto tcp ip daddr 192.168.0.0/16 return
ip daddr 192.168.0.0/16 udp dport != 53 return
ip6 daddr { ::1, fe80::/64 } return
meta l4proto tcp ip6 daddr 2409:8a55:612:cb0::/64 return
ip6 daddr 2409:8a55:612:cb0::/64 udp dport != 53 return
# Skip marked packets
meta mark 0x000000ff return
# TPROXY redirection to Xray on port 23939 (IPv4 and IPv6)
meta l4proto { tcp, udp } meta mark set 0x00000001 tproxy ip to 127.0.0.1:23939 accept
meta l4proto { tcp, udp } meta mark set 0x00000001 tproxy ip6 to [::1]:23939 accept
}
chain output {
type route hook output priority filter; policy accept;
# Exclusions
ip daddr { 127.0.0.0/8, 224.0.0.0/4, 255.255.255.255 } return
meta l4proto tcp ip daddr 192.168.0.0/16 return
ip daddr 192.168.0.0/16 udp dport != 53 return
ip6 daddr { ::1, fe80::/64 } return
meta l4proto tcp ip6 daddr 2409:8a55:612:cb0::/64 return
ip6 daddr 2409:8a55:612:cb0::/64 udp dport != 53 return
# Skip marked packets
meta mark 0x000000ff return
# Mark local traffic that should be proxied
meta l4proto { tcp, udp } meta mark set 0x00000001 accept
}
chain divert {
type filter hook prerouting priority mangle; policy accept;
# Mark packets for TPROXY based on socket transparent option
meta l4proto tcp socket transparent 1 meta mark set 0x00000001 accept
}
}
Любые рекомендации о том, как правильно интегрировать NAT libvirt с настройкой прозрачного прокси-сервера TPROXY, будут очень признательны.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... rent-proxy
Мобильная версия