Raspberry Pi의 Docker 컨테이너를 통해 WiFi AP의 트래픽을 라우팅하는 방법

Raspberry Pi의 Docker 컨테이너를 통해 WiFi AP의 트래픽을 라우팅하는 방법

컨테이너가 있어요VPN 클라이언트를 실행한 다음 다른 컨테이너를 전송합니다'(두번째그리고) 컨테이너를 통한 트래픽.

컨테이너를 만드는 방법이 있나요?, 다음과 같이 실행 중입니다.호스트 AP또는라즈베리 파이예를 들어 인터페이스에서 Wi-Fi 네트워크를 생성하는 데 사용되며 wlan0모든 트래픽은 컨테이너를 통해 라우팅됩니다.?

내 아키텍처에 대해 위에서 언급한 클라이언트와 함께 도커 허브에서 일부 도커 이미지를 찾았으며 이에 대한 몇 가지 설명은 내가 달성하려는 것과 유사해 보였지만 제대로 작동하지 않았습니다.

이전 옵션이 가능하지 않은 경우 호스트 운영 체제(Raspbian)에서 파일을 직접 변경하여 이를 달성하려면 어떻게 해야 합니까? 호스트는 eth0라우터를 통해 연결됩니다.

먼저 인터페이스에서 직접 컨테이너를 실행해 본 eth0다음 컨테이너에 연결해 보았습니다.. 그들 중 누구도 직업이 없습니다.

Hostap의 Docker 조합:

sudo docker run --restart unless-stopped -dit --name hostap \
  -e INTERFACE=docker0 \
  -e CHANNEL=6 \
  -e SSID=runssid \
  -e AP_ADDR=192.168.254.1 \
  -e SUBNET=192.168.254.0 \
  -e WPA_PASSPHRASE=passw0rd \
  -e OUTGOINGS=eth0 \
  -e HW_MODE=g \
--net host --privileged sdelrio/rpi-hostap:latest

로그 파일:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm/v7) and no specific platform was requested
2448abea512bf5207f7692d242804b0a0198b6e076b011c311b06092af1b5d80

그런 다음 전체 Raspberry Pi Docker 설치가 중단됩니다(다른 컨테이너에 액세스할 수 없음). 다시 접근하려면 컨테이너를 죽이고 제거해야 합니다.

** Raspap을 사용한 Docker 구성: **

sudo docker run --name raspap -it -d --privileged --network=host -v /sys/fs/cgroup:/sys/fs/cgroup:ro --cap-add SYS_ADMIN jrcichra/raspap-docker

이 작업은 컨테이너가 생성된 후 컨테이너를 중지합니다.

로그 파일:

systemd 241 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
Detected virtualization docker.
Detected architecture arm.

Welcome to Debian GNU/Linux 10 (buster)!

Set hostname to <Server-Pi>.
Failed to create /init.scope control group: Read-only file system
Failed to allocate manager object: Read-only file system
[!!!!!!] Failed to allocate manager object.


설정:

  • Raspberry Pi 4의 Raspbian에서 실행되는 Docker

확인할 Docker 이미지:

미리 감사드립니다.

답변1

설명하는 첫 번째 오류는 docker 허브의 이미지가 RPi의 CPU 아키텍처용으로 구축되지 않았기 때문에 발생합니다. 이미지 아키텍처는 입니다 linux/amd64. 원하는 아키텍처는 입니다 linux/arm/v7. 저는 개인적으로 컨테이너에서 Hostap을 실행하는 것이 그다지 유익하다고 생각하지 않으며, rpi-hostap의 기본 이미지는 물론 이미지 자체도 오래되고 유지 관리되지 않은 것처럼 보이지만 정말로 원한다면 시도해 볼 수 있습니다.평판을 쌓다당신 자신.

먼저, WLAN 인터페이스에 IP를 할당하고 DNS 및 DHCP 서버(예: dnsmasq)를 생성해야 합니다. 이에 대한 수많은 튜토리얼을 온라인에서 찾을 수 있습니다.

VPN 컨테이너를 통해 트래픽을 라우팅하려면 컨테이너와 호스트에서 IP 전달을 활성화하고, VPN 컨테이너 브리지 인터페이스에 대한 iptables 가장 규칙을 생성하고, 다음을 사용하여 WLAN 인터페이스에서 트래픽을 라우팅하는 IP 규칙을 추가해야 합니다. 사용자 지정 라우팅 테이블, 그리고 VPN 컨테이너 IP 주소를 사용하여 이 라우팅 테이블에 기본 경로를 추가합니다. 이는 다음과 같이 보일 수 있습니다.

호스트에서 IP 전달 활성화: 변경 사항을
편집 /etc/sysctl.conf, 변경 net.ipv4.ip_forward = 0, net.ipv4.ip_forward = 1저장 및 로드하는 데 사용됩니다 sysctl -p.

VPN 구성:

version: "3.8"

services:
  vpn-01:
    build: image
    container_name: vpn-01
    networks:
      net:
        ipv4_address: 172.16.239.2
    volumes:
      - './config/vpn-01/openvpn:/config/openvpn'
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
    sysctls:
      - net.ipv4.ip_forward=1

networks:
  net:
    driver: bridge
    ipam:
      name: vpn_net
      driver: default
      config:
      - subnet: 172.16.239.0/24
        gateway: 172.16.239.1

라우팅 및 NAT(docker.service 및hostapd.service 이후 시작 시 실행할 수 있음):

# MASQUERADE cause wlan1 net has no route in vpn containers and default route changed to vpn
docker_if_vpn="br-$(docker network ls | grep vpn_net | cut -d' ' -f1)"
iptables -t nat -I POSTROUTING -o "${docker_if_vpn}" -j MASQUERADE

# Change default route for traffic from wlan1 to vpn container
vpn_container_name="vpn-01"
docker_ip_vpn="$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "${vpn_container_name}")"
ip route add default via "${docker_ip_vpn}" table 202
ip rule add from all iif wlan0 table 202

# Use main routing table first but don't match 0.0.0.0/0 ("default")
ip rule add from all lookup main suppress_prefixlength 0

관련 정보