VNC sobre o roteador Raspberry Pi usando o encaminhamento de porta

3

Configurei o Raspberry Pi como um roteador e ponto de acesso para dispositivos clientes, e ele funciona sem problemas.

Funciona com o uso de programas hostapd e isc-dhcp-sever, mas há um desafio: habilitar conexões VNC através do roteador Raspberry Pi. Abaixo você encontra esquemas do que foi feito.

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

Minha idéia era habilitar o encaminhamento de porta no arquivo rc.local, mas ele não está executando código por algum motivo desconhecido.

Abaixo, você pode encontrar o conteúdo do arquivo 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
    
por user217392 22.02.2017 / 11:18

3 respostas

1

Seu script funciona e cria as entradas do 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

Coloque seu script em um arquivo próprio com #!/bin/bash como linha 1, dê permissão de execução, teste-o e, quando estiver pronto, chame-o de rc.local '

    
por 26.02.2017 / 11:10
1

Por padrão, o arquivo /etc/rc.local é interpretado por sh (a primeira linha deste arquivo indica #!/bin/sh -e ). Você usou um loop for no estilo C, que só funciona em bash . Eu acredito que é a causa raiz.

Substitua a primeira linha de /etc/rc.local por #!/bin/bash -e ou reconfigure seu loop de maneira compatível com 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
    
por 27.02.2017 / 17:34
1

Principalmente o linux usa o mesmo firewall. Portanto, configure o firewall adequadamente em qualquer Desktop Linux e, após a verificação, copie as regras de iptables para o Raspberry Pi. Eu acho que isso pode ajudar com erro de configuração. Embora um truque barato:)

    
por 28.02.2017 / 06:19