VNC через маршрутизатор Raspberry Pi с использованием переадресации портов

Я настроил Raspberry Pi как маршрутизатор и точку доступа для клиентских устройств, и он работает без проблем.

Он работает с использованием программ hostapd и isc-dhcp-sever, но есть проблема: включение VNC-соединений через маршрутизатор Raspberry Pi. Ниже вы можете найти схемы того, что было сделано.

intranet <--> [xxxx|eth0] Raspberry Pi 2 [192.168.1.1/24|wlan0] <--> clients 

Моя идея состояла в том, чтобы включить для перенаправления портов в файл rc.local, но он не выполняет код по неизвестной причине.

Ниже вы можете найти содержимое файла rc.local:

 # enable VCN port forwarding vncport=5900 for (( counter=0; counter<91; counter++ )) do port=$[10010+counter] address=$[10+counter] iptables -A PREROUTING -t nat -i eth0 -p tcp --dport "$port" -j DNAT --to 192.168.1."$address":"$vncport" iptables -A FORWARD -p tcp -d 192.168.1."$address" --dport "$port" -j ACCEPT done # access point code iptables -A FORWARD -o eth0 -i wlan0 -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE exit 0 

3 Solutions collect form web for “VNC через маршрутизатор Raspberry Pi с использованием переадресации портов”

Ваш скрипт работает и создает эти записи iptables:

 # iptables -L FORWARD -nv Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.10 tcp dpt:10010 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.11 tcp dpt:10011 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.12 tcp dpt:10012 ... 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.98 tcp dpt:10098 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.99 tcp dpt:10099 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.100 tcp dpt:10100 # iptables -t nat -L PREROUTING -nv Chain PREROUTING (policy ACCEPT 11 packets, 1746 bytes) pkts bytes target prot opt in out source destination 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10010 to:192.168.1.10:5900 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10011 to:192.168.1.11:5900 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10012 to:192.168.1.12:5900 ... 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10098 to:192.168.1.98:5900 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10099 to:192.168.1.99:5900 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10100 to:192.168.1.100:5900 

Поместите свой скрипт в собственный файл с #!/bin/bash как строку 1, дайте ему разрешение на выполнение, протестируйте его и когда rc.local готовы, вызовите его из rc.local `

По умолчанию файл /etc/rc.local интерпретируется sh (первая строка этого файла читает #!/bin/sh -e ). Вы использовали цикл цикла C, который работает только в bash . Я считаю, что это основная причина.

Либо замените первую строку /etc/rc.local на #!/bin/bash -e , либо перепишите свой цикл в sh-совместимом виде:

 counter=0 while [ "$counter" -lt 91 ] do port=$((10010+counter)) address=$((10+counter)) iptables -A PREROUTING -t nat -i eth0 -p tcp --dport "$port" -j DNAT --to 192.168.1."$address":"$vncport" iptables -A FORWARD -p tcp -d 192.168.1."$address" --dport "$port" -j ACCEPT counter=$((1+counter)) done 

В основном linux использует один и тот же брандмауэр. Таким образом, настройте брандмауэр правильно в любом настольном Linux и при проверке скопируйте правила iptable в Raspberry Pi. Я думаю, это может помочь с ошибкой конфигурации. Хотя дешевый трюк 🙂

  • Дистанционно отключить вывод дисплея?
  • Запуск VNC-просмотра из окон 8.1 в Debian Jessie не работает
  • Настроить Cent OS 6.4, чтобы рабочий стол сохранялся после закрытия сеанса VNC?
  • VNC & SSH: локальный (win-putty) -> hop (linux) -> remote (linux)
  • Удаленная поддержка: маршрутизация RDP через туннель ssh?
  • VNC с хост-компьютера на Android-телефон под управлением Ubuntu
  • Переключатель задач внутри VNC
  • Требуется новый «X» рабочий стол для VNC?
  • Доступ к удаленной ОС OS от OSX, Linux, Windows
  • Есть ли способ запустить VNC-сервер для уже запущенного X-сеанса?
  • Использование gdm для управления аутентификацией xdmcp через VNC
  • Linux и Unix - лучшая ОС в мире.