Как направить трафик из Ethernet на устройство Tun (создать порт Ethernet с VPN-соединением)

У меня есть N etwork V ideo R ecorder, который подключен к Raspberry Pi напрямую через Ethernet, а wlan0 Pi подключен к Интернету через wlan0 . Я хочу направить весь трафик с NVR через VPN-соединение на Raspberry Pi.

Вот как я запускаю VPN:

 openvpn --config /home/pi/my_conf.conf --pull-filter ignore redirect-gateway --route-noexec 

Я игнорирую маршруты, проталкиваемые сервером через эти команды, которые я нашел в открытых руководствах по VPN . После проверки я вижу, что устройство tun0 создается после подключения к VPN.

Таким образом, чтобы маршрутизировать трафик от NVR к VPN, мне нужно дать интерфейсу eth0 raspberry pi статический IP-адрес в диапазоне, используемом NVR. Я сделал это следующим образом в /etc/dhcpcd.conf :

 interface eth0 static ip_address=192.168.1.1/24 static routers=192.168.1.1 static domain_name_servers=192.168.1.1 

У моего малинового wlan0 есть шлюз 192.168.0.1 поэтому нет конфликта. Теперь, когда у меня есть IP-адрес для интерфейса eth, который находится в диапазоне NVR, и у меня есть соединение с VPN-сервером на tun0 , все, что мне нужно сделать, это добавить маршрут к tun0 для IP-адресов NVR собирается получить доступ. Поскольку я хочу получить доступ к некоторым IP-камерам в диапазоне 192.168.0 / 24, вот что я сделал со своей таблицей маршрутизации:

 pi@raspberrypi:~ $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0 0.0.0.0 192.168.0.1 0.0.0.0 UG 304 0 0 wlan0 192.168.0.0 0.0.0.0 255.255.255.0 U 304 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0 192.168.255.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 

Вы можете видеть, что все в диапазоне 192.168.1.0/24 проходит через tun0 потому что имеет метрику 0 .

Несмотря на то, что я также запускаю dnsmasq на eth0 , я использую статический IP-адрес и на NVR, который равен 192.168.1.9 .

Очевидно, я не могу получить доступ ни к каким камерам в NVR. Я попытался добавить соединение на NVR к камере 192.168.1.189 . Я попытался запустить tcpdump на eth0 , это в основном то, что я вижу:

 17:10:46.673062 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.189 tell 192.168.1.9, length 46 

NVR ( 192.168.1.9 ) пытается выяснить, кто такой 192.168.1.189 , но ответа нет. Я полагаю, ничего не рутируется. Я также пытался пинговать 192.168.1.189 на Raspberry Pi, чтобы посмотреть, сработало ли оно. Это сработало с первого раза, когда я попробовал. Через несколько минут я не могу больше пинговать, я не знаю почему. Пинг 192.168.1.1 всегда работает, хотя.

ОБНОВИТЬ:

Я вроде понял проблему, с которой столкнулся. Поскольку сетевой видеорегистратор находится в подсети 192.168.1.0/24 и пытается получить доступ к камере в той же подсети, его IP-пакеты не отправляются на шлюз (raspberry pi). Вместо этого он пытается найти, где находится 192.168.1.189 (камера), отправляя запросы ARP, как я видел в tcpdump.

Чтобы решить эту проблему, я изменил подсеть NVR на 192.168.2.0/24 и дал адрес 192.168.2.1 интерфейсу eth0 Raspberry Pi. Теперь я могу видеть каждый пакет, отправленный NVR на камеры и на некоторые серверы Amazon и так далее. Тем не менее, нет ответа. NVR только отправляет пакеты, но ничего не получает. Я проверил, и маршруты к tun0 в порядке, поэтому пакеты должны пройти через него. Однако пакеты не возвращаются.

ОБНОВИТЬ:

вместо того, чтобы вручную добавлять маршруты, я добавил следующее в свой открытый файл конфигурации vpn на клиенте:

 route 192.168.1.0 255.255.255.0 route-metric 0 route-nopull 

прямо под client . Теперь я вижу этот маршрут в таблице маршрутизации после подключения VPN. Я также могу пинговать его от Raspberry Pi, и он работает. Однако похоже, что NVR все еще только отправляет пакеты и ничего не получает

Важно: если я запускаю tcpdump -vvv -i eth0 я вижу много пакетов, предназначенных для 192.168.1.189 который является моей камерой. Они должны перейти к tun0 потому что есть маршрут с метрикой 0 который заставляет их пройти через него. Если я запускаю tcpdump -vvv -i tun0 я ничего не вижу, даже если я tcpdump -vvv -i tun0 минут. Таким образом, вещи не проходят туда. Однако, если я запускаю ping 192.168.1.189 внутри моего raspberry pi (через ssh), я вижу все пакеты ping в tcpdump tun0 , что подтверждает, что маршрут работает. Это не работает для пакетов, поступающих из Ethernet, хотя.

Interesting Posts

Как сохранить строку «*» в переменной в unix / bash?

Как смонтировать каталог в другой каталог?

Как использовать grep и вырезать скрипт для получения URL-адресов веб-сайтов из файла HTML

Неизвестное слово появляется автоматически после смены пароля для пользователя

BASH – Ассоциативный массив – получение значения ключа в конечном элементе

процесс, который может выполнять только root

Головоломка для блокировки Linux

Сортировка данных в порядке убывания первого столбца, для равных значений, используйте второй столбец в порядке возрастания

Команда Linux Centos 5.5 yum update не работает

Прочитайте строку из файла, манипулируйте, а затем добавьте в другой файл

Как получить выполняемые в настоящее время семафоры с помощью / proc?

Как создать конкретный файл из пакета GNU Automake?

Соберите существующий RAID 0 с помощью mdadm

Подключить USB к файловой системе только для чтения

Использование apprarmor / grsec для получения возможностей для файла

Linux и Unix - лучшая ОС в мире.