
Я тестирую и калибрую OpenVPN в Linux, изначально используя бесплатные VPN.
Согласно всем источникам, которые я видел, прокси OpenVPN должен прослушивать localhost: 1194. Фактически он постоянно прослушивает 0.0.0.0, источник, и браузер будет подключаться к OpenVPN только с прокси, установленным на этот адрес на обычном порту.
0.0.0.0 не упоминается в man openvpn. Одно упоминание в сети показывает этот адрес в реализации сервера, но я запускаю клиент, использующий client.ovpn без указания 0.0.0.0. Онлайн-советы обычно предупреждают о приложениях, прослушивающих источник, но что более важно, вся документация, которую я видел, предполагает, что OpenVPN прослушивает localhost:1194, и браузеры должны быть настроены на этот прокси.
Почему OpenVPN прослушивает не тот адрес и как это исправить?
Редактировать:
Снова взглянув на man openvpn, я вижу, что 0.0.0.0 упоминается как «шлюз по умолчанию», а localhost указан как IP-адрес управления.
Все упоминания, которые я помню, об использовании коммерческих VPN с OpenVPN и об использовании браузеров с OpenVPN предполагали или подразумевали использование localhost:1194. Это также подразумевается в том, что большинство прокси слушают на localhost (Tor, Privoxy и т. д.). Несмотря на комментарий ниже, OpenVPN и VPN-клиенты в целом действительно широко обсуждаются, как будто они являются прокси - доступными службами прослушивания, такими как socks или http-туннели, на которые приложение переносит сетевую активность.
Ни в одном из них я не видел упоминаний о необходимости ввода 0.0.0.0:1194 в качестве рабочего прокси-сервера, и действительно, Firefox не будет работать с OpenVPN, если адрес:порт не будут указаны явно.
В единственных имеющихся у меня руководствах по iptables с OpenVPN предлагается указывать только dport, но не адрес, что предполагает, что порт находится на localhost.
Все упоминания находятся в сохранённых документах в Интернете, URL-адреса которых у меня нет, а времени искать информацию в Интернете у меня сейчас нет.
Обсуждения IP 0.0.0.0 предполагают, что служба, которая здесь слушает, делает это на всех интерфейсах, что я сразу же рассматриваю как проблему. Я бы предпочел ограничить слушателя определенным интерфейсом, т. е. localhost. Например, следующее появляется в другом месте на Superuser:
Когда служба прослушивает 0.0.0.0, это означает, что служба прослушивает все настроенные сетевые интерфейсы, при прослушивании 127.0.0.1 служба привязана только к интерфейсу loopback (доступному только на локальной машине)
IP-адрес 0.0.0.0 может иметь совершенно разные значения в зависимости от того, где он используется.
Это недопустимый адрес для назначения фактическому сетевому интерфейсу вместе с любым другим адресом в подсети 0.0.0.0/8 (т. е. любым адресом, начинающимся с 0.). Его нельзя использовать в качестве исходного адреса в любом IP-пакете, если только это не происходит, когда компьютер все еще не знает свой собственный IP-адрес и пытается его получить (классический пример: DHCP). При использовании в таблице маршрутизации он определяет шлюз по умолчанию; маршрут к 0.0.0.0 является маршрутом по умолчанию, т. е. тем, который используется, когда нет более определенного маршрута к адресу назначения. Наконец, если его увидеть в выводе команды netstat (что вы и просили), это означает, что данный сокет прослушивает все доступные IP-адреса, которые есть у компьютера; если у компьютера более одного IP-адреса, сокет можно привязать только к определенной паре адреса и порта или к порту и всем адресам; если вы видите там IP-адрес, это означает, что сокет прослушивает только этот порт и этот конкретный адрес; Если вы видите 0.0.0.0, это означает, что он прослушивает этот порт на всех адресах машины, включая петлевой (127.0.0.1).
Похожее предложение с угрожающим тоном сделано на Lifewire; это тем более плохо, что OpenVPN работает от имени root на этапе инициализации, прежде чем вернуться к статусу непривилегированного пользователя, и, насколько мне известно, для Debian не существует никаких мер по смягчению этой проблемы.
https://www.lifewire.com/four-zero-ip-address-818384
В качестве примечания: можно ли настроить OpenVPN с любым заданным сервером на прослушивание на локальном хосте?
решение1
IP-адрес0.0.0.0
означает адрес по умолчанию.
OpenVPN, по-видимому, настроен на маршрутизацию всего трафика через VPN, поэтому он прослушивает (и отвечает) на все запросы клиента, чтобы направить их через VPN.
Если вы настроите его так, чтобы он не прослушивался 0.0.0.0
, вы потеряете возможность маршрутизировать все по умолчанию через VPN.
Объяснение: OpenVPN создает виртуальный сетевой адаптер, который для операционной системы является тем же самым, что и физический. Пока OpenVPN подключен, ваш компьютер имеет два таких адаптера.
Для того, чтобы все интернет-запросы проходили через его адаптер, OpenVPN устанавливает свой адрес маршрутизации на 0.0.0.0
. Это специальный метаадрес, значение которого — «Я всем управляю».
До подключения OpenVPN физический адаптер объявлял себя как 0.0.0.0
, поэтому его драйвер прослушивал его.
После подключения OpenVPN отключил 0.0.0.0
физический адаптер и забрал его себе, так что теперь драйвер OpenVPN прослушивает его.
Единственный способ заставить OpenVPN прекратить прослушивание 0.0.0.0
— отключить VPN. Он должен прослушивать его, чтобы иметь возможность функционировать.