Служба Samba не прослушивает указанный интерфейс wireguard / vpn.

Вопрос или проблема

Я настроил VPN-сеть Wireguard между тремя компьютерами.

  • A) Мой домашний ПК, который работает как клиент Wireguard и хочет подключиться к моей Samba-доле на офисном сервере C).
  • B) Мой домашний сервер, который выступает как сервер Wireguard/конечная точка. A) и C) подключаются к нему.
  • C) Мой офисный сервер, который имеет Samba-долю, к которой я хочу получить доступ через Wireguard.

  • Переадресация, кажется, работает правильно, потому что:

    • Я могу пинговать с A) на C) и с C) на A), используя IP-адрес интерфейса Wireguard для C).
    • Я также могу подключаться по SSH с A) на C), используя IP-адрес интерфейса Wireguard для C).

Я думаю, что проблема в моем smb.conf или в том, как smbd.service привязывается к интерфейсам, которые я указал в smb.conf, потому что:

  • Я не могу получить доступ к моей Samba-доле на C), используя IP-адрес Wireguard.
  • Я могу получить доступ к моей Samba-доле на C), указывая IP-адрес eth0.

Вот как выглядит мой файл smb.conf:

#### Networking ####

# Конкретный набор интерфейсов/сетей для привязки
# Это может быть имя интерфейса или IP-адрес/маска сети;
# обычно предпочтительны имена интерфейсов
;   interfaces = 127.0.0.0/8 eth0
   interfaces = lo eth0 wg-buero-tunnel

# Привязываться только к указанным интерфейсам и/или сетям; вы должны использовать
# опцию 'interfaces' выше, чтобы использовать это.
# Рекомендуется включить эту функцию, если ваша машина Samba не защищена
# файрволом или сама является файрволом. Однако эта
# опция не может корректно обрабатывать интерфейсы с динамическими
# адресами или без широковещательной способности.
;   bind interfaces only = yes
   bind interfaces only = yes 

и вот вывод netstat -tulpen | grep smbd

tcp        0      0 127.0.0.1:139           0.0.0.0:*               LISTEN      0          17353      1023/smbd
tcp        0      0 192.168.124.177:139     0.0.0.0:*               LISTEN      0          17349      1023/smbd
tcp        0      0 127.0.0.1:445           0.0.0.0:*               LISTEN      0          17352      1023/smbd
tcp        0      0 192.168.124.177:445     0.0.0.0:*               LISTEN      0          17348      1023/smbd

Здесь IP-адреса должны соответствовать устройствам, которые я указал в smb.conf, но один IP-адрес/устройство всё еще отсутствует.

lo 127.0.0.1

eth0 192.168.124.177

wg-buero-tunnel IP-адрес Wireguard полностью отсутствует

У меня действительно заканчиваются идеи.

Samba не будет прослушивать интерфейс Wireguard, если адрес/маска интерфейса не указаны явно, но если интерфейсы ограничены interfaces = ... и bind interfaces only = yes.

Решение — указать IP-адрес/маску для интерфейса Wireguard, например:

interfaces = lo eth0 10.8.0.0/24

Это также понятно из документации Samba
smb.conf: interfaces

… По умолчанию Samba будет запрашивать у ядра список всех активных интерфейсов и использовать любые интерфейсы, способные к широковещанию, кроме 127.0.0.1. …
… Параметры “маска” могут быть либо в виде количества бит (например, 24 для сети класса C) или полной сетевой маски в десятичной форме с точками.

Известно, что Wireguard не поддерживает широковещание и почему. Эти последствия для Samba говорят о том, что невозможно использовать три другие альтернативы для указания интерфейсов, описанные там, такие как 2) имя интерфейса или 3) только IP-адрес или 4) адрес/маска широковещания, поскольку Wireguard не поддерживает широковещание.

Вы также можете проверить это с помощью команды ip link:

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... 
    link/ether ...
wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> ...      # без "BROADCAST"
    link/none

Предложенные здесь решения мне не помогли, в моем случае решением было установить

bind interfaces only = no

в файле /etc/samba/smb.conf.template. Таким образом, Samba будет слушать на всех интерфейсах, независимо от того, поддерживают ли они широковещание.

Это может создать небольшую недостаточность, Samba-доля должна быть доступна по IP, а не по имени, поэтому, например:

\\192.168.1.1    - работает
\\SAMBA_SHARE    - не работает

но это не большая проблема.

Чтобы заставить такие вещи, как Samba (или подобные, которые требуют широковещания), работать на туннелях Wireguard, вы можете использовать туннель vxlan поверх Wireguard.

Эта инкапсуляция (vxlan) действует более или менее как “реальный” сетевой интерфейс, с полностью работающим широковещанием/многовещанием и т. д., по крайней мере, в моих сценариях.

Я настроил некоторые из этих туннелей, и они работают очень хорошо, даже с пенальти по производительности от двух инкапсуляций. Конфигурация также довольно проста с помощью команды “ip link add”, множество примеров можно найти в сети, я вдохновился этой (очень интересной) статьей (удалено, оставляю ссылку с IA):

https://web.archive.org/web/20200708181943/https://insom.github.io/journal/2017/04/02/

https://gist.github.com/pamolloy/f464c2b54af03c436491f42abf0bbff9

Дополнительным фактором, который дал мне эти симптомы, был мой файрвол ufw. Нужно было открыть его для интерфейса Wireguard. Я мог пинговать и подключаться по SSH, но, конечно, SSH уже был открыт через файрвол.

sudo ufw allow in on wg-buero-tunnel proto tcp to any port 139
sudo ufw allow in on wg-buero-tunnel proto tcp to any port 445
sudo ufw allow in on wg-buero-tunnel proto udp to any port 137
sudo ufw allow in on wg-buero-tunnel proto udp to any port 138

Я думаю, это потому, что Samba может прослушивать лишь интерфейсы, поддерживающие широковещание

  • Параметр: интерфейсы
  • Тип: строка
  • Описание: Сетевые интерфейсы, на которые Samba будет реагировать. Позволяет изменять значения по умолчанию.
  • По умолчанию: Все доступные интерфейсы, поддерживающие широковещание

Не говорится, что происходит с нестандартными, но я бы предположил, что так.

Интересно видеть, как уже есть подробные и конкретные ответы для решения проблемы, в то время как в моем случае – с практически такой же настройкой, как у автора – простое добавление подсети VPN в раздел hosts allow в /etc/samba/smb.conf (на Arch) уже сработало:

hosts allow = 192.168.10. 192.168.2. 127.

Здесь 192.168.2. – это моя подсеть LAN, а 192.168.10. – моя подсеть VPN Wireguard. Я могу подключиться к серверу SMB с устройства в WAN через VPN, не меняя ничего другого. Я могу читать/писать данные на, казалось бы, нормальных скоростях. Поэтому я не уверен, как именно влияние того, что Wireguard не поддерживает широковещание, проявляется, кроме, возможно, неработающего обнаружения.

Я провёл некоторые эксперименты. Оказалось, что если IP-хост Wireguard – это 10.8.0.1/24, вам нужно установить interfaces = lo eth0 10.8.0.1/24, чтобы это работало (не interfaces = lo eth0 10.8.0.0/24). Установка bind interfaces only = no не обязательна.

.

Ответ или решение

Чтобы решить проблему, когда Samba не прослушивает указанный интерфейс WireGuard/VPN, необходимо учесть несколько аспектов вашей конфигурации. Ваша ситуация предполагает, что выполнение пингов и SSH через VPN интерфейс функционирует, но доступ к Samba через тот же интерфейс недоступен. Вот детальная инструкция по решению этой проблемы:

Фоновый контекст

Ваша сеть включает три компьютера:

  1. Домашний ПК (A): Подключается к серверу Samba на офисном сервере через клиент WireGuard.
  2. Домашний сервер (B): Действует как сервер WireGuard.
  3. Офисный сервер (C): Хостит Samba-долю, которую вы хотите сделать доступной через VPN.

Проблема

Вы не можете получить доступ к Samba-доле на сервере (C) через WireGuard IP, но можете через IP eth0. Основная проблема связана с конфигурацией smb.conf, где интерфейсы не настраиваются для использования интерфейса WireGuard.

Решение

1. Конфигурация smb.conf

В файле smb.conf убедитесь, что интерфейс WireGuard правильно указан. Вместо имен интерфейсов используйте IP адреса с масками, чтобы учесть ограничение WireGuard на отсутствие поддержки broadcast. Например:

interfaces = lo eth0 10.8.0.1/32
bind interfaces only = yes

Здесь важно указать точный IP адрес интерфейса WireGuard вместе с маской, например, /32 для конкретного IP.

2. Обновление UFW (Uncomplicated Firewall)

Возможно, UFW блокирует порты Samba по интерфейсу WireGuard. Убедитесь, что правила UFW разрешают трафик для необходимых портов (137, 138, 139, 445) на интерфейсе WireGuard:

sudo ufw allow in on wg-buero-tunnel proto tcp to any port 139
sudo ufw allow in on wg-buero-tunnel proto tcp to any port 445
sudo ufw allow in on wg-buero-tunnel proto udp to any port 137
sudo ufw allow in on wg-buero-tunnel proto udp to any port 138

3. Настройка hosts allow

Добавьте ваш VPN подсеть в секцию hosts allow в smb.conf, чтобы разрешить доступ:

hosts allow = 192.168.124. 10.8.0.

Где 10.8.0. — это ваш диапазон адресов WireGuard.

Альтернативные подходы

1. Использование VXLAN

Если проблема продолжает возникать из-за необходимости поддержки broadcast, рассмотрите возможность использования VXLAN поверх WireGuard для создания интерфейса, поддерживающего broadcast.

2. Деактивировать bind interfaces only

Если все вышеперечисленные шаги не помогают, попробуйте временно установить:

bind interfaces only = no

Это позволит Samba прослушивать на всех доступных интерфейсах, но нужно учесть потенциальные риски безопасности.

Заключение

Использование точных IP адресов и соблюдение корректной конфигурации файрволла и Samba поможет решить проблему с доступом к Samba-доле через WireGuard интерфейс. Убедитесь, что каждое предложение решения тщательно протестировано для предотвращения проблем с безопасностью сети.

Оцените материал
Добавить комментарий

Капча загружается...