В конце концов я обнаружил проблему.
По умолчанию, если вы определяете сеть internal: true
это означает, что будут введены некоторые правила iptables, блокирующие выход из него всех контейнеров в сегменте локальной сети.
Вначале я думал, что это просто маршрут, скажем, с 192.168.80.2 на 192.168.80.1 (IP-адрес, назначенный хост-машине для этого сегмента локальной сети), а затем в Интернет. Внимательно прочитав все правила iptables, я обнаружил, что переадресация также отключена.
Удаление internal: true
позволил контейнеру маршрутизировать через VPN, как и ожидалось, за счет предоставления веб-серверу прямого доступа к общедоступному Интернету.