![모바일 장치가 유선 서버와 통신할 수 있도록 802.11s 메시 네트워크를 설정하세요.](https://linux55.com/image/58421/%EB%AA%A8%EB%B0%94%EC%9D%BC%20%EC%9E%A5%EC%B9%98%EA%B0%80%20%EC%9C%A0%EC%84%A0%20%EC%84%9C%EB%B2%84%EC%99%80%20%ED%86%B5%EC%8B%A0%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8F%84%EB%A1%9D%20802.11s%20%EB%A9%94%EC%8B%9C%20%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EC%84%B8%EC%9A%94..png)
저는 Linux 기반 WiFi 메시 네트워크에 대한 장치 연결을 유지하고 주기적으로 메시 네트워크 어딘가에 있는 알려진 서버에 상태 정보(GPS, 배터리 수명 등)를 보내는 Android 애플리케이션을 개발 중입니다. 저는 일반적으로 *nix를 처음 접했기 때문에 이 프로젝트는 엄청난 학습 곡선이었으며 네트워킹에 관해서는 제 능력을 훨씬 넘어서는 것 같습니다. 업데이트 패킷 트래픽이 항상 서버로 돌아가는 길을 찾는 데 문제가 있으며 누군가가 올바른 방향을 알려줄 수 있기를 바랐습니다.
각 그리드 노드는 세 가지 네트워크 인터페이스를 갖춘 소형 Linux 컴퓨터입니다.
ap0
WiFi 액세스 포인트 인터페이스가 관리됩니다 hostapd
. IP 주소는 192.168.0.1
연결된 휴대폰에 자동으로 동일한 서브넷의 IP가 할당되도록 설정됩니다 dhcpd
.
mesh0
WiFi 802.11s 메시 인터페이스는 메시 노드를 서로 연결합니다. 모든 사람은 네트워크의 구성원입니다 10.0.0.0
.
eth0
표준 이더넷 포트, 할당된 IP 192.168.1.101
. 단 하나의 그리드 노드만이 이 인터페이스를 사용하며 서버 시스템( )을 포함하는 네트워크에 연결됩니다 192.168.1.1
.
명확성을 위해 다음은 네트워크 구조 모델입니다.
지금까지 제가 달성할 수 있었던 것은 노드가 서로 ping하도록 하는 것뿐입니다. 무선 장치는 자체 네트워크(액세스 포인트 서브넷) 외부를 볼 수 없으며 이더넷에 연결된 노드를 제외한 다른 장치는 서버를 핑할 수 없습니다. 이 모든 것을 설정하는 스크립트는 다음과 같습니다(대부분 인터넷 검색을 통해 정리했습니다).
ifconfig wlan0 down
iw dev wlan0 del
iw phy phy0 interface add ap0 type managed
ip link set dev ap0 address 60:60:60:60:60:01 #this is different for each unit
ifconfig mesh0 up
ifconfig mesh0 10.0.0.1
ifconfig ap0 192.168.0.1 up
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o mesh0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i mesh0 -o eth0 -j ACCEPT
답변1
802.11s를 사용하면 유선 네트워크의 "메시"에 있는 모든 장치가 마치 물리적으로 동일한 네트워크 스위치에 연결되어 있는 것처럼 "레이어 2" 수준에서 서로를 볼 수 있습니다. 모두 동일한 IP 주소 범위 등을 사용하는 한 서로 "핑"할 수 있습니다.
현재 보유하고 있는 것은 서로 관련되지 않고 연결되지 않은 두 개의 네트워크입니다. 하나는 사용되고 10.x.x.x
두 번째는 사용됩니다 192.168.x.x
.
이러한 장치를 연결하려고 할 때 10.x
"게이트웨이" 주소가 무엇인지 모든 장치에 알려야 합니다(예: 패킷을 보내는 곳이지만 실제 목적지를 알지 못함). 어떤 경우에는 장치가 원하는지 게이트웨이 이다 10.0.0.1
. 그리고 이러한 패킷이 "나가야" 하는 네트워크 인터페이스를 알 수 있도록 "게이트웨이" 상자에 고정 경로가 필요합니다. 또한 다른 서브넷에도 다른 인터페이스의 "외부" 고정 경로가 필요하다는 것을 알 수 있습니다. MASQ와 RELATED를 모두 활성화했으므로 나가는 트래픽이 제대로 작동하면 "반환 트래픽"에 큰 문제가 없어야 합니다.