У меня дома 2 локальные сети:
- Основная локальная сеть, работающая за модемом моего интернет-провайдера (действующим как маршрутизатор с IP-адресом 192.168.0.1, который я буду называть маршрутизатором A). К этому маршрутизатору подключен Raspberry Pi по адресу 192.168.0.4.
- Вторичная локальная сеть, работающая за беспроводным маршрутизатором TP-LINK, подключенным к моему модему (моя основная локальная сеть) по адресу 192.168.0.10 (поэтому шлюз по умолчанию этого маршрутизатора — 192.168.0.10), который я буду называть маршрутизатором B. IP-адрес маршрутизатора в его локальной сети — 192.168.1.1. К этому маршрутизатору подключен жесткий диск, к которому я получаю доступ через общий ресурс Samba по адресу 192.168.1.1. Вот обзор этой настройки:
Router A 192.168.0.1 | | - Raspberry Pi | Router B 192.168.0.10 to router A, | 192.168.1.1 to clients within | Samba server - 192.168.1.1
Я пытаюсь получить доступ к своему ресурсу Samba с моего Raspberry Pi, но поскольку они находятся в разных локальных сетях, Pi не видит мой ресурс Samba. Я пробовал перенаправлять порты Samba на маршрутизаторе B (порты 137–139 и порт 445) и получать доступ к ресурсу с Pi, используя IP 192.168.0.10 (IP-адрес маршрутизатора B в локальной сети Pi), но это не работает. Когда я подключаю Pi к локальной сети маршрутизатора B (используя Wi-Fi-модем), я могу получить доступ к ресурсу Samba по IP 192.168.1.1, но поскольку они находятся далеко, я постоянно теряю соединение. Как бы вы посоветовали мне это сделать, не подключая Pi к маршрутизатору B физически?
решение1
У тебямаршрутизацияпроблема.
Подумайте об этом: ваш RPI (192.168.0.x) ничего не знает о существовании другой локальной сети (192.168.1.x). Как вы можете сообщить ему, что рядом с ним существует другая локальная сеть? Ответ: с помощьюмаршрут, которая представляет собой весьма конкретную информацию, указывающую, как можно достичь определенной подсети/хоста.
В вашем примере ваша LAN 192.168.1.x находится за хостом "маршрутизатора B" (192.168.0.10). Чтобы достичь LAN 192.168.1.x, хосты, подключенные к другой LAN (192.168.0.x), должны были знать то же самое. Другими словами, вам нужно было сообщить вашей LAN 192.168.0.x, что другая LAN (192.168.1.x) может быть видна через маршрутизатор 192.168.0.10.
Это можно сделать с помощью следующей команды маршрутизации Linux: route add -net 192.168.1.0/24 gw 192.168.0.10
. Теоретически, эта команда необходима на каждом хосте, находящемся в локальной сети 192.168.0.x — несколько раздражающее занятие, когда у вас несколько (возможно, палаток) хостов. Однако существует и другое решение: позволить различным хостам 192.168.0.x ничего не знать о другой локальной сети, но сообщить главному маршрутизатору (маршрутизатору A — 192.168.0.1) о существовании такой сети. Однако, как я прочитал, вы не можете изменить таблицу маршрутизации маршрутизатора A ни в каком режиме, поэтому вы можете использовать только первый метод, описанный выше.
Последнее, не рекомендуемое решение, не включающее изменение маршрутизации, — это метод переадресации портов. В этом случае вы, по сути, говорите маршрутизатору B (192.168.0.10) настроить «поддельный» прослушиватель samba и перенаправлять все запросы samba на внутренний сервер samba 192.168.1.1. Почему это не рекомендуется? Потому что NAT может бесполезно увеличить сложность сети, и потому что это требует значительной обработки маршрутизатором B, что замедляет ваши соединения.
И последнее: проведите тест/настройку,всегда используйте IP-адрес Samba, а не имя сервера.Это потому, что NETBEUI (который превратился в NETBIOS) не был разработан для работы между различными локальными сетями, и это влияет на его возможности разрешения имен. Так что давайте упростим ситуацию: используем IP-адрес сервера samba для тестирования соединений.