Intereting Posts
Символ выходной вкладки в окне терминала Печать значений, которые не менее чем в 2 раза превышают значения 3 шага выше и ниже в том же столбце Какой процесс обновляется / proc / scsi / scsi? Исходящее приложение брандмауэра, похожее на Little Snitch для Mac получить приблизительный размер каталога (рекурсивно, включая все файлы и подкаталоги) Команда Grep, которая находит / исключает всю строку, где символ разделителя появляется определенное количество раз? Как распознать, какой символ ASCII в шестнадцатеричном состоянии? Как создать новую раскладку клавиатуры для XFCE4? Debian и Windows 8 UEFI с двойной загрузкой на отдельных дисках Как grep для 2 строк (условие AND) внутри блока, которые не находятся в одной строке, а затем найти что-то еще в этом же блоке Может ли Linux PC служить сетевым маршрутизатором? linux mtp разрешает только читать файл Я больше не могу получить доступ к учетной записи root: пользователь не находится в файле sudoers Как создать .deb, который имеет дело с различными системами инициализации Разделить PDF на цветные и черно-белые страницы

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 

Ваш скрипт работает и создает эти записи 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. Я думаю, это может помочь с ошибкой конфигурации. Хотя дешевый трюк 🙂