제가 만들려는 설정은 5개의 장치로 구성되어 있으며 모두 무선으로 서로 연결되어 있습니다. 언제든지 이러한 AP에 연결하고 네트워크의 모든 장치에 ping을 보낼 수 있습니다. 각 AP에는 자체 DHCP 서버도 있습니다.
더 흥미롭게 만들려면 모든 것을 동적으로 만드십시오. 즉, 이러한 장치 중 하나가 떨어지거나 새 장치가 추가될 수 있습니다.
A, E——고객님.
B, C, D - AP 및 클라이언트
WLAN1-AP 인터페이스
WLAN0 - 클라이언트 인터페이스
설정 예:
A(WLAN0) --- B(WLAN0,WLAN1) --- C(WLAN0,WLAN1) --- D(WLAN0,WLAN1) --- E(WLAN0)
올바른 연결 방법이 무엇인지 제안해 주세요.
지금까지...
Wi-Fi 드라이버는 rtl8723ds이고 브리지 인터페이스가 작동하지 않는 것 같습니다.
각 AP에 대해 서로 다른 서브넷 보유(장치가 클라이언트로 시작하고, 네트워크를 검색하고, AP를 시작하기 전에 사용되지 않은 서브넷을 선택함) - 이는 유망해 보이지만 라우팅은 악몽으로 변합니다.
고쳐 쓰다: 더 자세한 내용을 추가하고 몇 가지 사항을 명확히 하세요.
무선 인터페이스만 사용할 수 있습니다. 무선랜 1, 무선랜 0
외부 장치는 AP(또는 WiFi를 통해)에 연결할 수 있어야 하며, 네트워크의 모든 장치를 확인하고 UDP 패킷을 이들 중 하나로 보낼 수 있어야 합니다.
babeld ad-hoc/mesh 프로토콜을 가지고 놀았지만... 외부 장치(예: 스마트폰)가 메시와 통신할 수 있도록 babeld에 WLAN0을 제공하고 AP에 WLAN1을 제공하는 데 많은 문제가 발생했습니다. AP 구성을 위해 Hostapd를 사용합니다.
문제는 AP가 부팅될 때 발생합니다. 더 이상 장치를 볼 수 없습니다. 즉, 그리드가 사라집니다. 일부 임의 장치에서는 babeld를 다시 시작해야 할 수도 있습니다.
그리드 노드에 대해 DHCP가 작동하도록 관리하지 못했습니다. 어쩌면 장치가 무작위 순서로 부팅되고 전체 네트워크가 자주 가동/중단되기 때문일 수도 있습니다. 정적 노드가 없습니다.
임의의 테스트를 실행했는데 이상한 불안정성이 있었습니다. 예를 들어 그리드를 밤새 실행한 채로 두면 아침에 장치가 더 이상 서로를 볼 수 없습니다.
업데이트 2:최종 목표에 대한 자세한 내용은 여기를 참조하세요.
나는 한동안 이 점을 깊이 파고들었고 이 모든 것의 목적을 설명하기 위해 너무 많은 주요 세부 사항을 빠뜨렸다고 생각합니다. 어쩌면 더 좋은 방법이 있을 수도 있습니다.
상대적으로 서로 가깝고 모두 상호 연결된 소형 임베디드 장치의 모음입니다.
유일한 연결 옵션은 WiFi입니다.
다른 Wi-Fi 지원 장치(예: 스마트폰)는 Wi-Fi에 연결할 수 있어야 합니다.하나사용자 정의 UDP 데이터를 전송하고 패킷을 식별하는 장치모든 기기. 가장 논리적인 해결책은 장치 중 하나의 버튼을 눌러 AP를 시작하는 것 같습니다.
정해진 것은 없으며 장치의 수도 변경됩니다.
Babeld는 나를 그리드 아이디어에서 제외시켰지만 어쩌면 배트맨이 더 유망할 수도 있습니다. 더 이상 옵션이 없나요..?
AP, 클라이언트, AP...및 모든 라우터를 연결합니다. 조사를 하면 할수록 상황은 더욱 악화되었습니다.
업데이트 3:
rtl8723ds 드라이버가 있는 배트맨 - 모듈을 작동시킬 수 없습니다. 모듈을 로드하려고 하면 계속 분할 오류가 발생합니다.
또 다시 막다른 골목에 부딪혔습니다. .
답변1
"올바른" 방법은 설정에 따라 다릅니다.
LAN과 인터넷을 통해 서로 연결되어 있는 여러 개의 고정 장치가 설치되어 있는 경우 집합체를 사용하고 싶습니다.분배 체계동일한 BSSID를 갖고 각 장치에서 액세스 포인트를 실행하십시오. 이는 각 장치에서 wlan AP 인터페이스와 이더넷 인터페이스(예: 및 )를 연결 wlan0
하고 다른 곳(또는 장치 중 하나)에서 단일 DHCP 서버를 실행한다는 의미입니다. eth0
더 많은 액세스 포인트를 추가하는 것은 클라이언트 수에 관계없이 "정상적으로" 작동합니다.
반면, WLAN을 통해 서로 연결하려는 장치가 많은 경우에는메쉬 네트워크. 이것은 당신이 사용한다는 것을 의미합니다하나의각 장치의 WLAN 인터페이스는 "메시" 또는 "임시"(IBSS) 모드입니다.아니요액세스 포인트 및 클라이언트 역할을 합니다. 또한 라우팅 대상(예: 모든 장치가 항상 서로 볼 수 있는지 또는 서로 볼 수 없는 장치 간에 라우팅할지 여부 등)을 지정해야 합니다. 선택할 수 있는 메시 라우팅 프로토콜은 다양합니다. 놀 수있다.
여러 액세스 포인트와 클라이언트가 있는 메시 네트워크를 만드는 것은 재미있을 수 있지만 권장하지는 않습니다.
자세한 내용은 질문을 업데이트하면 제공됩니다.
편집하다
어떤 시나리오를 달성하고 싶은지 아직 완전히 확신할 수 없습니다.
다음 시나리오를 원하는 경우:
많은 노드("라우터")는 WLAN을 통해 서로 연결되며, 각 노드는 AP를 제공합니다. 또는 일부 노드를 인터넷에 연결할 수도 있습니다.
많은 클라이언트는 연결할 노드 AP 중 정확히 하나를 선택하고 "노드 네트워크"에서 격리되어야 할 수도 있습니다(필수, 필수 아님).
그렇다면 사용된 것과 유사한 인프라를 추천하겠습니다.프라이핑크계획. 그들은 사용한다배트맨레이어 2 라우팅의 경우 OpenWRT 및 Gluon 기반 "노드"(일반적으로 단일 WLAN 인터페이스가 있는 저렴한 라우터, 두 개의 WLAN 인터페이스가 있는 하드웨어가 있는 경우 더 좋음)용 기성 펌웨어를 제공하고 로컬 그리드에 연결합니다. 게이트웨이를 통해(필요하지 않을 수도 있음) 이는 수백 개의 노드, 때로는 수천 명의 클라이언트로 구성된 지역 커뮤니티와의 성공적인 협업입니다.
레이어 3 라우팅을 사용하는 Babel은 더 큰 네트워크로 더 잘 확장되어야 합니다. Freifunk의 일부 사람들이 Batman을 대체하기 위해 작업하고 있다는 것을 알고 있지만 지금까지는 여전히 버그가 있습니다(귀하의 경험과 일치하는 것 같습니다).
시나리오가 다르고 다른 것을 원하는 경우 참고하시기 바랍니다.
편집하다
예, 최종 목표에 대한 정보를 더 추가해 주세요. 아직 그림이 불분명합니다. 질문:
스마트폰이 식별 패킷을 보내야 하는 이유모두장비? 하나의 장치로 충분하지 않습니까? 기기에서 어떤 종류의 답변/상호작용을 기대하시나요?
사용자 상호 작용이 갑자기 나타나는 이유는 무엇입니까("버튼을 눌러야 합니다")? 인증에 꼭 필요한가요? 스마트폰이 언제든지 식별 패킷을 보낼 수 있다면 어떻게 될까요? 스마트폰 앱 사용자는 사전 공유 키를 입력해야 하나요?
보안 문제가 있나요? 노드는 서로 인증해야 합니까? 스마트폰은 노드에 대해 자체 인증을 받아야 합니까? 노드로? 모든 노드에? 보안 고려 사항은 중요하므로 명확하고 완전하게 작성하십시오.
클라이언트(스마트폰)의 요구사항은 무엇인가요? 스마트폰이라면 어플리케이션만 실행할 수 있나요? (그래서 스마트폰은 STA으로 AP를 통해 연결해야 합니다.) 아니면 네트워크 설정을 수정할 수 있나요? 스마트폰 외에 다른 유형의 고객도 있나요?
어쨌든, 지금까지 내가 이해한 바에 따르면 다음은 어떻습니까?
wlan0
모든 노드는 인터넷의 IBSS와 인터넷의 개방형 AP(암호화 없음)를 통해wlan1
Batman Mesh를 구현합니다 . AP(wlan1
)는 BatmanGrid(bat0
)에 연결됩니다. 전체 그리드에는 IPv4 주소를 할당하는 DHCP 서버가 있습니다. 또는 IPv6을 사용할 수 있는 경우 링크-로컬 IPv6 주소로도 충분할 수 있습니다.이는 기본적으로 LAN 세그먼트인 모든 장치에 개방적이고 안전하지 않은 전송 계층을 제공한다는 의미입니다. 모든 보안 프로토콜은 이 계층 위에 구현되어야 합니다.
모든 노드는 상호 작용을 위해 일부 데몬을 실행합니다. 노드는 UDP 브로드캐스트를 통해 서로를 인증합니다.
클라이언트(스마트폰)는 일반적인 절차를 통해 모든 AP에 연결됩니다. 스마트폰에는 UDP 브로드캐스트를 통해 모든 노드에 대해 자신을 인증하는 애플리케이션이 있습니다. 그 시점부터 UDP 유니캐스트(또는 TCP 등)를 통해 하나, 여러 또는 모든 노드 악마와 상호 작용할 수 있습니다.
그렇습니다. 분산 네트워크 애플리케이션은 어렵습니다. "빠르게 작성할" 수는 없습니다.
그리고 배트맨은 사용되는 WLAN 드라이버와 완전히 독립적입니다. 선택한 Batman 버전이 커널 버전에 맞는 최신 버전인지 확인하고 커널 모듈을 컴파일한 후 연결하세요. 인터페이스를 얻은 bat0
다음 이를 사용하여 batctl
그리드 인터페이스를 추가해야 합니다.