무선 연결을 다른 네트워크 네임스페이스로 이동하는 방법은 무엇입니까?

무선 연결을 다른 네트워크 네임스페이스로 이동하는 방법은 무엇입니까?
# ip link set  wlan0 netns 1
RTNETLINK answers: Invalid argument

일반적인 이더넷에서 작동합니다. 또한 독점적인 broadcom "wl" 드라이버에서도 작동합니다.

일반적인 mac80211 기반 드라이버는 어떻게 하나요?

답변1

PHY를 이동해야 합니다.

iw phy phy0 set netns 666

여기서 666은 해당 네트워크 네임스페이스에서 실행 중인 일부 프로세스의 pid입니다. iproute2도구(사용 ) 로 생성된 넷스페이스의 경우 ip netns거기에 단기 프로세스를 생성하고 해당 pid를 얻을 수 있습니다.

iw phy phy0 set netns "$(ip netns exec mynetns sh -c '
  sleep 1 >&- & echo "$!"')"

다시 루트 네임스페이스로 이동하려면 다음을 수행하세요.

ip netns exec mynetns iw phy phy0 set netns 1

답변2

Wi-Fi의 경우 먼저 인터페이스의 물리적 주소를 가져옵니다(무선 카드가 2개 이상인 경우).

iw dev

결과는 다음과 같습니다.

phy#0
        Interface wlp58s0
                ifindex 3
                wdev 0x1
                ...

그래서 이름은phy0

이제 이를 사용하여 Wi-Fi를 네임스페이스에 할당합니다.

# iw phy phy0 set netns name <MyNamespace>

다음의 도움으로 iw:

    phy <phyname> set netns { <pid> | name <nsname> }
            Put this wireless device into a different network namespace:
                <pid>    - change network namespace by process id
                <nsname> - change network namespace by name from /var/run/netns
                           or by absolute path (man ip-netns)

답변3

내 자신의 해결 방법을 구현했습니다.진실을 입증하다

  1. 가상 인터페이스 쌍을 생성하고 그 중 하나(예: veth1)를 다른 네임스페이스로 이동합니다 ip link add type veth. ip link set veth1 netns <some_pid>;
  2. wlan0 인터페이스와 veth0을 활성화하되 주소를 추가하지 마세요.
  3. vethify wlan0 veth0호스트 네트워크 네임스페이스에서 시작합니다 . wlan0에서 캡처된 모든 내용을 veth0으로 복사하고 그 반대로 복사합니다.
  4. veth1의 다른 네임스페이스에서 IP 주소 및 라우팅을 구성합니다.
  5. veth1에 대한 체크섬 오프로딩을 비활성화합니다: ethtool --offload veth1 rx off tx off && ethtool -K veth1 gso off.

참고: vethify는 wlan0 및 veth0뿐만 아니라 네트워크 네임스페이스의 모든 패킷을 봅니다. 대기 시간이 추가되고 추가 오버헤드가 발생합니다.

관련 정보