Вопрос или проблема
Я создаю VPN для доступа к VPC, но хочу, чтобы остальной трафик не проходил через VPN.
Я смог получить доступ к VPC через VPN, но при подключении к нему теряю доступ к интернету.
Вот конфигурация моего сервера:
port 1194
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/vpn.crt
key /etc/openvpn/server/vpn.key
dh /etc/openvpn/server/dh.pem
topology subnet
server 172.16.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "route 10.0.0.0 255.255.0.0"
keepalive 10 120
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-GCM
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
Я добавил этот iptable на сервер для доступа к VPC:
sudo iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -d 10.0.0.0/8 -j MASQUERADE
А вот мой файл .ovpn для клиента:
client
dev tun
proto udp
remote XXXXXXXXXXXXX 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-GCM
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
verb 3
ca [inline]
cert [inline]
key [inline]
tls-auth [inline] 1
pull
<ca>....
При подключении к VPN на клиенте добавляется маршрут с назначением 0.0.0.0 и шлюзом на VPN сервер, я думаю, это и есть проблема, но не знаю, как избежать этого.
~ route -n
Таблица маршрутов IP ядра
Назначение Шлюз Маска сети Флаг Метрика Ссылка Использ. Интерфейс
0.0.0.0 172.16.0.1 0.0.0.0 UG 50 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eno1
10.0.0.0 172.16.0.1 255.255.0.0 UG 50 0 0 tun0
[**VPN IP**] 192.168.1.1 255.255.255.255 UGH 50 0 0 eno1
172.16.0.0 0.0.0.0 255.255.255.0 U 50 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1
192.168.1.1 0.0.0.0 255.255.255.255 UH 50 0 0 eno1
Я использую стандартный менеджер сети Ubuntu для импорта файла .ovpn и подключения к VPN.
Хорошо, похоже, это проблема с менеджером сети Ubuntu.
Я использовал OpenVPN Connect, и с этим приложением на Windows и Mac все работает нормально, а также на Linux, используя командную строку:
sudo openvpn --config settings.ovpn
Ответ или решение
Ваша проблема возникает из-за того, что при подключении к VPN устанавливается маршрут по умолчанию через VPN-сервер, что приводит к потере доступа в интернет. Чтобы решить эту проблему, необходимо внести некоторые изменения в конфигурацию OpenVPN как на стороне сервера, так и на стороне клиента.
Настройки на сервере
Ваш сервер OpenVPN настроен правильно для доступа к VPC, однако для конфигурации маршрутизации, чтобы интернет-трафик не отправлялся через VPN, нужно скорректировать параметры, которые отправляет сервер клиентам.
-
Удалите команду push для маршрута по умолчанию: Убедитесь, что в конфигурации сервера нет команды, которая передает клиенту маршрут по умолчанию. Проверьте ваш файл конфигурации сервера на наличие строки
push "redirect-gateway def1"
или другой аналогичной. -
Попробуйте использовать push для маршрута к VPC: Вместо маршрута по умолчанию, который нарушает соединение с интернетом, вы хотите добавить маршрут только для вашего VPC:
push "route 10.0.0.0 255.255.0.0"
Судя по вашему вопросу, эта команда уже включена в ваш конфиг, так что это правильный шаг.
Настройки на клиенте
На стороне клиента вы также можете изменить, как OpenVPN обрабатывает маршрутизацию.
-
Удаление маршрута по умолчанию: Попробуйте добавить в ваш клиентский файл
.ovpn
следующую строку, чтобы отключить получение маршрута по умолчанию:route-nopull
Это предотвратит установку маршрута по умолчанию через VPN, и пользовательский трафик будет следовать через ваш обычный интернет-шлюз.
-
Добавьте маршруты для VPC: Убедитесь, что маршруты для VPC установлены, добавив следующий маршрут в файл
.ovpn
, который вы используете:route 10.0.0.0 255.255.0.0
Установка и использование OpenVPN на Ubuntu
Так как вы заметили, что проблема может быть связана с Network Manager в Ubuntu, вы можете рассмотреть возможность использования командной строки для запуска OpenVPN, как это делаете вы с sudo openvpn --config settings.ovpn
.
Пример конфигурации
В конечном итоге, вот пример вашей клиентской конфигурации .ovpn
, которому нужно следовать:
client
dev tun
proto udp
remote XXXXXXXXXXXXX 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-GCM
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
verb 3
route-nopull
route 10.0.0.0 255.255.0.0
<ca>
....
</ca>
<cert>
....
</cert>
<key>
....
</key>
tls-auth [inline] 1
Заключение
После внесения указанных изменений, ваши клиенты должны иметь возможность подключаться к вашему VPC через VPN, не теряя доступ к интернету. Если проблемы продолжаются, рекомендуется провести дополнительные проверки на стороне клиента, чтобы удостовериться в отсутствии конфликта с другими сетевыми настройками или программами.