포트 전달을 사용하는 Raspberry Pi 라우터의 VNC

포트 전달을 사용하는 Raspberry Pi 라우터의 VNC

Raspberry Pi를 클라이언트 장치의 라우터 및 액세스 포인트로 구성했는데 제대로 작동합니다.

Hostapd 및 isc-dhcp-sever 프로그램과 함께 작동하지만 한 가지 과제가 있습니다. Raspberry Pi 라우터를 통해 VNC 연결을 활성화하는 것입니다. 아래에서 완성된 작업의 개략도를 확인할 수 있습니다.

intranet <--> [x.x.x.x|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

답변1

스크립트가 실행되고 다음 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

1행에 표시된 대로 스크립트를 자체 파일에 넣고 #!/bin/bash실행 권한을 부여한 후 테스트하고 준비가 되면 rc.local `에서 호출하세요.

답변2

기본적으로 파일은 /etc/rc.local(읽은 파일의 첫 번째 줄)로 해석됩니다. 다음에서만 작동하는 C 스타일 루프를 사용했습니다. 이것이 근본 원인이라고 생각합니다.sh#!/bin/sh -eforbash

첫 번째 줄을 /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

답변3

대부분의 Linux는 동일한 방화벽을 사용하므로 어떤 환경에서도 방화벽을 올바르게 구성할 수 있습니다.데스크탑리눅스그리고 확인 후 iptable 규칙을 Raspberry Pi에 복사합니다. 이것이 구성 오류를 해결하는 데 도움이 될 것이라고 생각했습니다. 그래도 저렴한 트릭 :)

관련 정보