Конечная цель (диаграмма ASCII)
WAN->Router->Server->GRE Tunnel->VM network->VM #1, etc.
Сначала я должен кое-что объяснить.
У меня есть сервер под управлением Proxmox (Debian 8.7 x64). Его подключение к Интернету - eth0 (за NAT с перенаправлением протокола GRE)
Интерфейс GRE (gre1) создается и контролируется настраиваемым демоном, запущенным на хосте, но в остальном не затрагивает правила или маршруты брандмауэра. IP-адрес этого компьютера в туннеле GRE - 192.168.168.2, а удаленная конечная точка - 192.168.168.1.
У меня одна настройка сетевого моста (vmbr0). Вот соответствующий конфиг.
auto vmbr0
iface vmbr0 inet static
address 10.2.0.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.2.0.0/24' -o gre1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.2.0.0/24' -o gre1 -j MASQUERADE
На машине, которая является другим концом туннеля GRE, у меня уже есть iptables, настроенные для NAT должным образом, и я могу пинговать 192.168.168.1 и внешние пункты назначения, используя ping -I gre1 на хосте, однако внутри виртуальной машины я могу пинговать 192.168.168.2 и. 1, но не за границу.
Я подозреваю, что решением этой проблемы является некая таблица маршрутизации foo, поскольку я заставил ее работать раньше, заменив маршрут шлюза по умолчанию на хосте на 192.168.168.1 и вручную создав маршрут для конечной точки туннеля GRE через 192.168.1.1 (мой маршрутизатор) , однако это также заставляет весь трафик хоста проходить через туннель GRE, что мне не нужно, только трафик виртуальной машины.
Я сделал это, чтобы заставить весь трафик, включая трафик хоста, проходить через туннель GRE.
ip route add GRE_TUNNEL_ENDPOINT via 192.168.1.1 # to avoid running the GRE tunnel in itself
ip route change default via 192.168.168.1
Может быть, какие-то политики исходной маршрутизации в порядке?
Спасибо