Назад | Перейти на главную страницу

защита от проводов не прослушивает порт после запуска

Я запускаю проводку с помощью этой команды:

wg-quick up wg0

это состояние защиты от проводов:

и используя эту команду, чтобы увидеть порт прослушивания:

lsof -i:7456

почему защита не прослушивает порт? Конфигурация Wireguard прошла успешно?

Я предполагаю, что это сделано в Linux, поскольку не сказано иное и из-за контекста контейнера.

Описание lsof говорит:

ОПИСАНИЕ

Lsof ревизия 4.91 перечисляет в своем стандартном выходном файле информация о файлах, открытых процессами для следующих диалектов UNIX:

  • Apple Darwin 9 и Mac OS X 10. [567]
  • FreeBSD 8. [234], 9.0 и 1 [012] .0 для систем на базе AMD64
  • Linux 2.1.72 и выше для систем на базе x86
  • Solaris 9, 10 и 11

В Linux WireGuard - это не стандартный процесс, а сетевой драйвер, управляемый ядром. Даже если в конце концов это могло бы создать поток ядра, появляющийся в списке процессов, этот «процесс» был бы особенным и не давал бы никакой доступной информации о его открытых файловых дескрипторах (если такая концепция в любом случае имеет смысл для потока ядра).

Таким образом lsof не может найти такую ​​информацию и всегда возвращает пустой результат.

Но такая команда, как netstat -nul | grep -w 7456 или ss -nul sport = :7456 все равно будет отображать это, где это было создано (см. ниже), потому что он запрашивает только сетевые API ядра (соотв. /proc/net/udp{,6} или netlink/sock_diag), чтобы знать об прослушиваемых портах, а не обращаться к информации из ядра обработать API с этим из сетевого API.

При этом это действительно только в том случае, если команда wg-quick up wg0 был запущен в конкретном контейнере, после которого используется интерфейс. Если он был запущен на хосте, и после этого создание контейнера его «украло», все ставки отключены. Это потому, что WireGuard предназначен для работы с сетевыми пространствами имен (то есть с контейнерами). Вполне возможно, и задокументированный, чтобы создать интерфейс WireGuard в сетевом пространстве имен (например, в начальном пространстве имен хоста) и переместить его в другое сетевое пространство имен:

Готов к контейнерам

WireGuard отправляет и принимает зашифрованные пакеты, используя пространство имен сети, в котором изначально был создан интерфейс WireGuard. Это означает, что вы можете создать интерфейс WireGuard в своем основном сетевом пространстве имен, которое имеет доступ к Интернету, а затем переместить его в сетевое пространство имен, принадлежащее контейнеру Docker в качестве единственного интерфейса этого контейнера. Это гарантирует, что единственный возможный способ доступа контейнера к сети - это безопасный зашифрованный туннель WireGuard.

Это означает, что при перемещении интерфейса прослушивающий порт останется в предыдущем сетевом пространстве имен (вероятно, начальном хосте) и будет невидимым в пространстве имен сети, куда прибывает интерфейс. В таком случае порт прослушивания 7456 / UDP не будет виден в контейнере, но будет на хосте (или там, где он был изначально создан). Также обратите внимание, что WireGuard будет прослушивать (все еще только в исходном сетевом пространстве имен), только если интерфейс активирован административно (ip link set wg0 up). При его выключении прослушивающий порт временно удаляется.