WiFi 라우팅 및 게이트웨이에 대해 알아보기

WiFi 라우팅 및 게이트웨이에 대해 알아보기

나는 완전히 길을 잃었습니다. 저는 Linux 네트워킹의 진정한 초보자입니다.

내가 달성하고 싶은 것:

bobstro가 말했듯이 Wi-Fi에 연결된 UPnP 카메라가 Wi-Fi 네트워크 간에 이동할 수 있도록 허용하고 싶습니다. RPI는 이러한 네트워크에 연결되고 카메라는 RPi에 연결됩니다. 그러나 RPi는 액세스 포인트가 아닙니다. TCP나 웹소켓을 통해 서버에 접속하고, 카메라를 통해 사진을 찍으라는 명령을 받습니다. 그런 다음 websocket 또는 TCP를 통해 이미지를 다시 보냅니다.

내 상황:

내 Raspberry Pi에는 eth0, wlan0 및 wlan1(2개의 Wi-Fi USB 어댑터)의 세 가지 인터페이스가 있습니다.

  • wlan1은 SSDP를 통해 Wi-Fi 카메라에 연결하는 데 사용됩니다.

  • wlan0은 서버(알려진 IP/도메인 이름)에 대한 TCP 연결을 설정하는 데 사용됩니다. DHCP를 통해 연결하는 Wi-Fi 네트워크 wlan0에 대해 아무것도 모릅니다. 수시로 변경될 수 있습니다. 게이트웨이에 대해서는 구체적으로 알지 못합니다.

  • eth0은 SSH 액세스를 디버깅하는 데 사용되며, 예를 들어 MacBook Air를 사용하여 공유 서비스에 연결합니다.


        Server <---> Internet <--wlan0--> RPI <--wlan1--> Camera
                                           |
                                          etho
                                           |
                                        Macbook

현재 이러한 인터페이스는 온라인 상태입니다. 다음은 출력입니다 ifconfig(wlan1과 eth0은 동일한 네트워크에 있지만 앞으로는 그렇지 않습니다).

eth0      Link encap:Ethernet  HWaddr b8:27:eb:8c:e2:10
          inet addr:192.168.0.19  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1174 errors:0 dropped:0 overruns:0 frame:0
          TX packets:141 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:93616 (91.4 KiB)  TX bytes:12342 (12.0 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr c0:4a:00:2a:ab:6c
          inet addr:192.168.43.44  Bcast:192.168.43.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1142 (1.1 KiB)  TX bytes:1145 (1.1 KiB)

wlan1     Link encap:Ethernet  HWaddr 74:da:38:0c:c6:f0
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1480 errors:0 dropped:0 overruns:0 frame:0
          TX packets:155 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:222449 (217.2 KiB)  TX bytes:29711 (29.0 KiB)

출력은 다음과 같습니다 sudo route -n.

0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan1
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.43.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan0

그리고 여기 /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
        post-up route del default dev wlan0

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
        wpa-ssid "wifi1"
        wpa-psk "psw1"

auto wlan1
allow-hotplug wlan1
iface wlan1 inet dhcp
        wpa-ssid "wifi2"
        wpa-psk "pwd2"

지난 24시간 동안 읽은 내용을 올바르게 이해했다면 라우팅 작업을 해야 합니다. 그러나 나는 무엇을 어떻게 이해하지 못합니다.

기본 경로를 변경해야 합니까? 그렇다면 네트워크에 연결하기 전에는 wlan0이나 wlan1에 대한 게이트웨이를 모르기 때문에 어떻게 해야 할까요? 해결이 불가능한 문제인가요?

이 게시물은 중복되었을 수 있지만 어제부터 유용한 내용을 찾지 못했기 때문에 원본 게시물을 찾는 데 최소한의 도움이 필요합니다. :)

편집: Goldilocks가 언급했듯이 내 질문은 광범위합니다. 정말 죄송해요. 나는 네트워킹에 대해 아무것도 모른다. 이것을 더 구체적인 질문으로 나누는 방법을 모르겠습니다.

따라서 아마도 첫 번째 실패한 시도는 다음과 같습니다.

sudo ip route del default기본 eth0 게이트웨이를 제거해 보았습니다 . 그러면 명령이 sudo ip route add default dev wlan0작동하지만 다음 라우팅 테이블이 생성됩니다.

0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 wlan0

그리고 저는 Raspberry Pi가 wlan0 Wi-Fi 라우터 IP(모르겠습니다. 변경될 수 있음)를 찾아서 게이트웨이로 사용하기를 원합니다. 이것은 좋은 첫 번째 단계가 될 것입니다.

편집 2: wlan1은 이제 네트워크 192.168.2.x에 있습니다.

답변1

이 문제에 접근하는 방법과 관련된 부분적인 답변을 드릴 수 있지만 주의할 점은 시작 시 네트워크 구성 서비스를 사용하지 않고 원하는 작업을 수행하기 위해 스크립트를 직접 작성한다는 것입니다.

즉, 이를 테스트하려면 /etc/network/interfaces제외한 모든 항목을 주석 처리 lo하고 wlan0후자를 DHCP의 기본 경로로 사용하면 됩니다. 이는 시스템이 이런 방식으로 부팅된다는 의미입니다. 이 구성은 여러분 스스로 알아내도록 하겠지만 한 가지 주의할 점은 이 서브넷 마스크가 다른 서브넷 마스크와 충돌하지 않는다는 점을 알아야 한다는 것입니다. 이 모든 것이 달라야 합니다. 귀하가 통제할 수 있거나 사전에 알 수 있는 두 가지가 있을 수 있습니다.

첫 번째는 SSDP 카메라 서브넷입니다. 여기서 한 가지 문제는 dhclient이미 wlan0에서 임대를 유지하고 있는 경우 이에 대한 임대를 구성하는 것입니다. 이것이 쉽다고 생각할 수도 있지만, 둘러보면 꼭 그렇지는 않은 것 같습니다. 당신은 할 수이 시도, 그러나 제 생각엔 잠재적으로 덜 복잡한 두 가지 솔루션이 있는 것 같습니다.

  • 고정 IP를 사용하세요. 이것은 의심할 여지없이 가장 간단하고 가장 확실한 방법입니다.
  • dhcpcd을(를) 대신 사용합니다 dhclient. 어떻게 해야 할지 모르겠지만 가능한 것 같습니다.

고정 IP를 사용하면 하드코딩도 가능하므로 사용하기가 더 쉽습니다. 이 서브넷이 192.168.0.0/24192.168.0.101이고 IP가 192.168.0.101이라고 가정합니다.

ip link set wlan1 up
wpa_supplicant -B -c /path/to/essid/config -i wlan1
ip addr add 192.168.0.101 dev wlan1
ip route add 192.168.0.0/24 via 192.168.0.101

그러면 Mac에 대한 eth 연결은 거의 동일합니다.~ 해야 하다사용하기 쉬운 고정 IP:

ip link set eth0 up
ip addr add 192.168.1.10
ip route add 192.168.1.0/24 via 192.168.1.10

답변2

내가 이해하는 바에 따르면 RPi를 사용하여 Wi-Fi에 연결된 UPnP 카메라가 네트워크 간에 이동할 수 있도록 하고 RPi를 사용하여 각 사이트의 무선 네트워크에 연결하기를 원합니다.

그렇죠? RPi 라우팅 없이 네트워크에서 직접 카메라에 접근할 수 없는 이유가 있나요?

RPi에서 라우팅을 활성화했습니까? 대화형으로 라우팅을 활성화하려면 다음을 사용하십시오.

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

영구적으로 만들려면 /etc/sysctl.conf를 편집하고 net.ipv4.ip_forward = 1 행의 주석 처리를 제거하십시오.

sudo nano/etc/sysctl.conf

# IPv4 패킷 전달을 활성화하려면 다음 줄의 주석 처리를 제거하십시오.
net.ipv4.ip_forward=1

구성을 살펴보면 RPi는 기본 게이트웨이를 제공하는 DHCP를 통해 WLAN0의 주소를 얻습니다.

카메라가 어떻게 연결되어 있는지 설명하지 않았습니다. RPi를 액세스 포인트로 사용하시겠습니까? 그렇다면 카메라가 RPi에 무선으로 연결되고 RPi를 다시 가리키는 IP 주소와 기본 게이트웨이가 할당되도록 hostapd를 설정하고 RPi를 DHCP 서버로 구성해야 합니다.

eth0 인터페이스가 진단 목적으로만 사용되는 경우 이를 RPi의 기본 게이트웨이로 사용하지 않을 수도 있습니다.

어떻게 하려고 하는지 말하기보다는 무엇을 하고 싶은지 정확하게 명확하게 설명해야 합니다. 당신이하고있는 일은 아마도 잘못된 방법 일 것입니다.

도움이 된다면 유사하게 구성된 RPi를 사용하는 방법은 다음과 같습니다.

1개의 Wi-Fi 인터페이스는 RPi를 구성하는 데에만 사용됩니다. Hostapd와 dnsmasq를 사용하여 액세스 포인트로 구성했습니다. 사이트에 RPi를 처음 배치했을 때 MacBook에서 이 AP에 연결하여 구성했습니다. 내 MacBook에는 dnsmasq를 통해 RPi를 가리키는 IP 주소와 기본 게이트웨이가 할당됩니다. 구성이 완료된 후 이 인터페이스는 일반적으로 사용되지 않지만 필요에 따라 액세스할 수 있습니다.

1개의 Wi-Fi 인터페이스는 원격 액세스를 위해 각 사이트의 클라이언트 네트워크를 연결하는 데 사용됩니다. wicd-curses를 사용하여 인터페이스를 구성하고 해당 네트워크에서 핑할 수 있는지 확인했습니다. 그런 다음 VPN을 통해 사이트에 연결하고 RPi에 액세스할 수 있습니다. 사이트 WiFi 네트워크에 연결하면 내 RPi에는 DHCP를 통해 사이트의 인터넷 라우터를 가리키는 기본 게이트웨이가 할당됩니다.

유선 인터페이스는 테스트 네트워크에 연결하는 데 사용됩니다. /etc/network/interfaces를 통해 고정 IP 주소로 구성됩니다.

네트워크 간에 트래픽이 흐르는 것을 원하지 않기 때문에 라우팅을 사용하지 않습니다. 모든 트래픽은 RPi에서 종료됩니다. 그러나 일부 스크립트를 사용하면 필요에 따라 라우팅을 켤 수 있습니다. 필요에 따라 RPi를 브리지 또는 NAT 라우터로 사용하는 스크립트가 있습니다.

달성하려는 목표를 더 자세히 설명할 수 있다면 대답은 간단해야 합니다.

답변3

wlan0그래서 기본 경로가 어디에 있는지 에 대한 (임시?) 해결책을 찾은 것 같습니다 . Wi-Fi 게이트웨이를 알 필요는 없습니다.

핵심은 @goldilocks의 아이디어를 따라 라우팅 프로세스를 스크립팅하는 것입니다. 하지만 이 솔루션을 사용하면 dhcp에서 유지 eth0하고 실행할 수 있습니다.wlan1

그래서 다음을 포함하는 파일 /etc/dhcp/dhclient-enter-hooks.d/post-wlan0(및 그 chmod +x내용)을 추가했습니다.

# post-wlan0 script
# Goal : activate default route via wlan0 after wlan0 is up

#echo  "post-wlan0 start" >> /tmp/testwlan0.debug
if [ "$interface" = "wlan0" ]; then

        #echo  "wlan0 detected" >> /tmp/testwlan0.debug
        if [ -n "$new_routers" ] ; then

                #echo  "setting route" >> /tmp/testwlan0.debug

                sudo ip route del default
                sudo ip route add default via $new_routers dev wlan0

        fi
fi

실제로 이 스크립트는 dhcp 클라이언트가 작동할 때 트리거되는 후크입니다. 자세한 내용은 을 참조하세요 /etc/dhcp/dhclient-enter-hooks.d/debug.

따라서 wlan0시작되면 이전 기본 경로를 삭제하고 wlan0라우터 IP( $new_routers)를 사용하여 새 경로를 추가합니다.

출력 sudo route -n:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.43.1    0.0.0.0         UG    0      0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan1
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.43.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan0

eth0wlan1네트워크의 장치 나 ping을 수행할 수 있습니다 . 나는 ssh를 통해 그것을한다 eth0.

@goldilocks 및 @bobstro: 도움을 주셔서 정말 감사합니다! 이 솔루션이 좋다고 생각하시나요?


내 구성:

/etc/network/interfaces:

auto lo
iface lo inet loopback

# Connection to the world
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
        wpa-ssid "wifi1"
        wpa-psk "pwd1"

# Debugging connection
auto eth0
iface eth0 inet dhcp

# Connection to the future camera
auto wlan1
allow-hotplug wlan1
iface wlan1 inet dhcp
        wpa-ssid "wifi2"
        wpa-psk "pwd2"

출력 ifconfig:

eth0      Link encap:Ethernet  HWaddr b8:27:eb:8c:e2:10  
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1371 errors:0 dropped:0 overruns:0 frame:0
          TX packets:494 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:145112 (141.7 KiB)  TX bytes:87219 (85.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr c0:4a:00:2a:ab:6c  
          inet addr:192.168.43.44  Bcast:192.168.43.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:230 errors:0 dropped:0 overruns:0 frame:0
          TX packets:323 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:22412 (21.8 KiB)  TX bytes:32270 (31.5 KiB)

wlan1     Link encap:Ethernet  HWaddr 74:da:38:0c:c6:f0  
          inet addr:192.168.0.14  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1942 errors:0 dropped:1 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:305388 (298.2 KiB)  TX bytes:3302 (3.2 KiB)

편집: 이 솔루션은 UPnP 장치를 사용하여 어딘가에서 테스트되었습니다 wlan1. sudo ip route add 239.255.255.250 dev wlan1좋은 인터페이스를 통과하려면 UPnP에서 발견한 경로를 추가해야 했습니다 .

나는 사용했다이것테스트용 NodeJS 코드입니다.

관련 정보