wlan0을 eth0에 브리징


25

Arch Linux에서 eth0 (브리지 라우터에 연결됨)이 wlan0에서 수신 한 연결을 공유하도록하고 싶습니다. 튜토리얼을 읽었지만 다른 사용자와 같이 잘 알고 명령에 정통하지 않습니다.


8
질문이나 제목에 '[해결됨]'을 입력하지 마십시오. 답변을 수락하면 문제가 해결되었음을 나타내는 올바른 방법입니다. 기본 목록에 질문이 표시되는 방식이 변경되고 정답으로 표시된 답변에 녹색 확인 표시가 나타납니다.
Zypher

1
아무도이 페이지를 엉망으로하지 않으면 감사하겠습니다. 문제가 있으면 저에게 연락하십시오. 고맙습니다.
dbdii407

13
serverfault.com/faq "다른 사람들이 내 물건을 편집 할 수 있습니다"라는 제목
Zypher

@Zypher 연결 한 URL이 더 이상 존재하지 않습니다. 관련 단락이 다른 곳으로 이동 했습니까?
kasperd

답변:


24

최신 정보

linux-ath5k-devel의이 스레드에 따라 무선 (클라이언트 일명 스테이션 모드)과 유선 인터페이스간에 브리지 할 수 없습니다 .

NAT 설정

대신 NAT를 설정해야합니다.

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

IP 할당

그런 다음 자신에게 IP 주소를 할당해야합니다.

ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up

dhcp 데몬 설치

dhcp 서버를 설치하고 다음 텍스트를 구성 파일에 추가하십시오 (/etc/dhcpd.conf 또는 이와 유사한 것).

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.100 10.0.0.120;
    option routers 10.0.0.1;
    option domain-name-servers the-ip-address-you-have-in-etc-resolv.conf;
}

dhcpd 시작

그런 다음 /etc/init.d/dhcpd start로 시작하십시오.

그리고 그게 다야!

작동하지 않는 브리징 설정에 관심이있는 경우에만 아래를 읽으십시오.


brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0

먼저 브리지 인터페이스를 만들고 임의의 이름으로 mybridge를 선택한 다음 인터페이스를 추가합니다.

새 IP 주소를 요청해야합니다 (브리징 장치 자체에 유효한 IP를 얻으려는 경우에만 필요함).

dhclient -d mybridge

3
브리지가 작동하기 위해 실제로 브리지 인터페이스에 IP 주소가 필요하지 않습니다.
Massimo

7
mybridge를 연결하기 위해 wlan0을 추가 할 수 없음 : 작업이 지원되지 않음
dbdii407

1
@Massimo : 그렇습니다. "브리징 장치"에서 네트를 액세스하려면 유효한 IP가 필요합니다.
cstamas

10
NAT는 브리징과 완전히 다른 것입니다. 브리징은 계층 2, NAT는 계층 3 및 IPv4에 따라 다릅니다. 이것이 왜 받아 들여 지는지 이해가되지 않습니다.
WhyNotHugo

3
@Hugo IP NAT는 계층 3이지만 MAC NAT는 계층 2입니다. WiFi 브리징의 경우 4addr, WDS, MAC NAT를 사용하거나 대신 계층 3에서 IP NAT와 같은 작업을 수행 할 수 있습니다.
David Schwartz

27

Wi-Fi 인터페이스 를 연결 하기 위해 iw도구를 사용하여 4addr활성화 할 수 있습니다 .

# iw dev <wifiInterface> set 4addr on

즉 :

# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported

# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>

이제 작동합니다. 다음을 사용하여 브리지를 표시 할 수 있습니다.

# brctl show

2
이 설정은 무엇이며이 시나리오에서 사용하도록 특별히 제안하는 이유는 무엇입니까?
hakre 2016 년

브리지 인터페이스에 wlan0 인터페이스를 추가하려고 할 때 "작업이 허용되지 않음"오류에 대한 솔루션입니다. 그런 다음 시작 후 표시되도록 브리지 인터페이스를 / etc / network / interfaces에 지정해야합니다.
Str82DHeaD

1
@hakre이 4addr모드는 WiFi가 브리징이 작동하는 유선 이더넷처럼 충분히 작동하도록합니다. 이것이 없으면 브리지가 NAT없이 작동하지 않습니다.
David Schwartz

1
4addr무선 링크의 양쪽이 그것을 지원할 것을 요구합니다 (WiFi 익스텐더를 구현하려고한다고 가정)
nhed

5

AP의 의미에 따라 다릅니다.

1) 알려진 링크 계층 주소로 브리지 패킷이 아닌 패킷 만보고 싶을 수도 있습니다 .2) 실제로 더 똑똑하고 어떤 IP 주소가 어떤 링크 계층 주소에 속해야하는지 알고 있습니다 (원인) DHCP를 알고 검사합니다)

1 + 2가 모두 참이면 IP NAT, DHCP, ..와 같은 것이 필요합니다.

그러나 1) 경우에만 링크 계층 주소를 위조하여 여기에 설명 된대로 다른 방향으로 오른쪽 주소로 역 맵핑 할 수 있습니다.

https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC


정말 지저분합니다. 새 컴퓨터를 추가 할 때마다 추가 설정이 필요합니다.
Michael Hampton

4

다른 답변에 설명 된 4addr은 어댑터 / 드라이버에서 지원 할 때 가장 좋은 방법이지만 모든 것을 지원하지는 않습니다. NAT는 어떤 경우에는 효과가있을 수 있지만 LAN에서 양방향으로 적절한 통신을 얻는 것은 문제가 될 수 있습니다 (예 : 프린터를 연결하거나 NAT 반대쪽에있는 다른 IoT 장치에 액세스). 브로드 캐스트 / 멀티 캐스트 (예 : 자동 검색, Bonjour)에 의존하는 것은 NAT를 통해 실패합니다.

대안은 https://wiki.debian.org/BridgeNetworkConnectionsProxyArp에 설명 된대로 ARP 프록시 (parprouted)를 사용하는 것 입니다. 나는 이것을 프린터의 Raspberry Pi에 설정했으며 매력처럼 작동합니다 ( post-up명령에 10 초의 절전 모드를 추가 하여 IP 주소를 먼저 얻도록했습니다. RPi ...)


proxy-arp plus dhcp-helper 솔루션에 대한이 링크는 지금까지 내가 본 가장 호환 가능하고 가장 깨끗한 솔루션입니다.
minghua

3

교량 무선 랜 및 4addr :

wlan0 브리징은 고통입니다. 일반적으로 브리지 인터페이스에 추가 할 수 없으며 (brctl은 "작업이 허용되지 않음"을 반환 함) VirtualBox "브리지 된"필터를 사용하면 ARP 및 DHCP 충돌이 엉망이됩니다. 802.11 프레임에는 기본적으로 무선 장치 (노트북 및 AP)와 최종 수신자 (이더넷에서와 같이)의 MAC 주소의 세 가지 주소 만 포함되기 때문입니다. 항상 가능한 발신자가 하나만 있다고 가정합니다.

802.11은 네 번째 발신자의 MAC 주소를 전달할 수 있으며 WDS 모드에서 리피터에 의해 사용됩니다. 이 기능은 Linux에서도 iw를 사용하여 활성화 할 수 있으며이 모드를 활성화하면 브릿지 인터페이스 및 VirtualBox 브릿지 네트워킹에서 wlan0을 사용할 수 있습니다.

iw dev wlan0 set 4addr on

그러나 4addr을 활성화하면 AP에 의해 완전히 무시 될 수 있습니다. 연결은 성공하지만 모든 데이터 프레임이 에테르로 사라집니다. 소스 MAC 주소를 스푸핑하기 어렵 기 때문에 보안상의 이유 일 수 있습니다. 예. OpenRG를 실행하는 라우터에서 무선 AP 인터페이스에 대해 "WDS"모드를 활성화해야합니다. 랩톱의 MAC 주소를 찾아 LAN 브리지에 추가하십시오. 4addr 패킷이 작동합니다.

그러나 이것에 대한 또 다른 문제가 있습니다. 라우터는 이제 랩탑에서 3 개의 주소 패킷을 거부하는데, 이는 다소 불편할 수 있습니다 (WLAN 네트워크가 변경 될 때마다 4addr를 토글하게 함). 해결 방법은 랩톱에서 동일한 장치에 연결되어 있지만 다른 MAC 주소로 연결된 두 번째 무선 인터페이스를 추가하는 것입니다. 먼저 이전 구성을 실행 취소하십시오.

iw dev wlan0 set 4addr off

그런 다음 다른 MAC 주소로 이름을 임의로 선택한 두 번째 인터페이스를 추가하십시오.

iw dev wlan0 interface add wds.wlan0 type managed 4addr on
ip link set dev wds.wlan0 addr <addr>
ip link set dev wds.wlan0 up

라우터에 구성된 WDS 장치 주소와 일치해야합니다. 그 이외의 다른 유효한 MAC 주소 일 수 있습니다. wlan0의 원래 MAC은 "정상"사용을 위해 유지됩니다.

wlan0과 wds.wlan0을 동시에 사용할 수 있습니다. 비록 다른 AP가 아닌 동일한 AP에 두 번만 연결하는 것으로 테스트했지만. 나는 그들이 적어도 같은 채널에 있어야한다고 생각합니다.

어떤 사람들은 VirtualBox가 WiFi를 "정상"브리지 할 수있는 이유를 물었습니다. 그 대답은 VirtualBox가 가상 머신의 MAC 주소를 보내지 않는다는 것입니다. 오히려 MAC 계층에서도 NAT를 수행합니다. – 2014-08-22

직접 WLAN 브리지

특정 상황에서는 wlan_kabel을 사용할 수도 있습니다. 패킷 소켓을 사용하여 WLAN 장치를 이더넷 장치와 직접 브리지합니다. 그러나 wlan_kabel을 사용하면 한 번에 하나의 단일 MAC 만 브리지 할 수 있습니다. 무선 랜 장치의 원래 MAC 만 사용되므로 액세스 포인트에 의해 차단되는 단점이 없습니다. 귀하의 경우 이는 wlan0을 하나의 VM에서만 사용할 수 있고 호스트에서도 사용할 수 없음을 의미합니다. 여기서 wlan_kabel 을 얻을 수 있습니다 . 이것은 macvlans 솔루션 과 유사합니다 .

ipvlan과의 브리징

그것을 사용하는 방법 IP VLAN은의 네트워크 세부 사항을 해소하기 위해 사용될 수있는 다리의 제한이 없습니다 여기에서 찾을 수 있습니다

가장 무도회 대안

다리를 만들기 위해 iptables-masquerade 및 ip_forward와 함께 Linux 라우팅을 사용할 수 있지만 언급 한 바와 같이 ip_forward를 활성화해야하며 리눅스가 라우터처럼 작동하게하므로 약간의 보안 문제가 발생할 수 있으므로 신중하게 설정해야합니다.

# bridge setup
brctl addbr br0
ifconfig br0 10.10.20.1/24 up

# enable ipv4 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward

# netfilter cleanup
iptables --flush
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# netfilter network address translation
iptables -t nat -A POSTROUTING -o wlan0 -s 10.10.20.0/24  -j MASQUERADE

그러면 br0 인터페이스는 wlan0 네트워크에 액세스 할 수 있습니다

중요하고 관련된

또한 매우 중요 하므로 ifconfig, brctl 등과 같이 더 이상 사용되지 않는 더 이상 사용되지 않는 명령을 사용해서는 안됩니다 . iproute2 제품군에는 가상 인터페이스 설정 (한 번 openvpn을 사용해야했던 것) 및 브리지 생성을 포함하여이 모든 명령이 포함되어 있습니다. IP로 브리지를 설정하는 방법을 모른다면 여기로 이동하십시오.

  ip tuntap add tap0 mode tap user root 
  ip link set tap0 up
  ip link add br0 type bridge
  ip link set tap0 master br0
  ip link set eth0 master br0
  ip addr add 10.173.10.1/24  dev br0
  ip link set br0 up

이 명령 세트를 사용하여 tap0이라는 가상 인터페이스를 만든 다음 br0이라는 브리지를 만든 다음 브리지에 eth0 및 tap0을 종속시켜 IP 주소 10.173.10.1을 할당 한 다음 모두 가져옵니다. 인터페이스를 작동시키는 별도의 세 가지 인스턴스 (tap0, eth0 및 br0)가 필요합니다.

이 작업을 수행하는 요령은 PC (VM / Linux 컨테이너 / 네트워크 네임 스페이스 아님)가 대신 ARP 쿼리에 응답 할 수 있도록하는 proxy.arp를 사용하는 것입니다.

다시 말해, 하드웨어 인터페이스와 가상 인터페이스간에 IPv4 전달을 사용하면 마치 물리적 인터페이스 인 것처럼 VM / LXC / NNS를 LAN에 연결할 수 있다고 생각하지만 사실은 아닙니다. 기본 ARP 트래픽은 LAN이 실제로 작동 할 수있게 해줍니다. 따라서 문제는 IPv4 트래픽을 올바르게 전달하는 경우 VM / LXC / NNS가 작동하도록 ARP 트래픽을 전달할 수있는 방법입니다. 요령은 proxy-arp를 사용하는 것입니다.

이에 대한 전체 답변은 Bohdi Zazen의 블로그 에 있으며 제목은 Bridge 무선 카드입니다. 그는 사용하지 않는 패키지 인 uml-utilities를 사용하여 tunctl 명령을 사용하여 가상 인터페이스를 작성합니다. 이것은 uml-utilities를 사용하는 유일한 명령이므로 패키지 다운로드를 무시하고 명령을 사용할 수 있습니다. 탭 또는 툰 인터페이스를 만들기 위해 위와 같이 작성했습니다. 원하는 방식으로 명령을 수정하십시오. 그런 다음 LXC에 대한 베스 페어를 만들고 tap0과 veth0 사이에 브리지를 만듭니다. 이 브리지 (br0)는 Bohdi Zazen이 설명한 간단한 tap0 인터페이스 대신 프록시를 사용해야합니다.


출처 : askubuntu.com , nullroute.eu.org , firejail.wordpress.com , superuser.com


0

Proxy Arp approach를 좋아 했지만 원래 질문은 Arch Linux를 지정했습니다. 다음 은 Raspbian 구현 의 Arch Linux 버전입니다 . 나는 여기 에 언급 된 데비안 위키의 원래 접근 방식성공적으로 사용 하거나 사용 하지 않고 netctl 에 적용하려고 매우 노력했습니다 . 모든 것은 명령 줄에서 작동했지만 프로파일에서는 작동하지 않았습니다.ExecUpPostExecDownPre

단계들:

  1. systemd-networkd로 무선 네트워킹을 구현하십시오 . .network 파일 내에서을 설정하십시오 IPForward=yes. 내가 사용하는 WPA 요청자를 무선 네트워크 인터페이스를 관리 할 수 있습니다.
  2. ; enable-reflector=yes내에 설정하여 mDNS 릴레이를 활성화하십시오 /etc/avahi/avahi-daemon.conf. 시작 avahi-daemon.service하지 않은 경우 활성화 하십시오.
  3. 설치 parprouted AUR를에서, 그리고에서 한 적응하여에 대한 서비스 파일을 생성 Raspbian 대답을 . 인터페이스를 무차별로 설정해야 할 필요성을 찾지 못했습니다. 당연히이 서비스는 시작되고 활성화되어야합니다.
[Unit]
Description=proxy arp routing service
Documentation=https://raspberrypi.stackexchange.com/q/88954/79866

[Service]
Type=forking
# Restart until wlan0 gained carrier
Restart=on-failure
RestartSec=5
TimeoutStartSec=30
ExecStartPre=/lib/systemd/systemd-networkd-wait-online --interface=wlan0 --timeout=6 --quiet
ExecStartPre=/usr/bin/echo 'systemd-networkd-wait-online: wlan0 is online'
# clone the dhcp-allocated IP to eth0 so dhcrelay will relay for the correct subnet
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip addr add $(/usr/bin/ip -4 -br addr show wlan0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
ExecStartPre=/usr/bin/ip link set dev eth0 up

#         v minus sign
ExecStart=-/usr/bin/parprouted eth0 wlan0

ExecStopPost=/usr/bin/ip link set dev eth0 down
ExecStopPost=/usr/bin/bash -c '/usr/bin/ip addr del $(/usr/bin/ip -4 -br addr show eth0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'

[Install]
WantedBy=wpa_supplicant@wlan0.service
  1. 이더넷 포트에 연결된 장치에 DHCP를 지원하려면 DHCP 패키지에서 dhcrelay 서비스를 작성하십시오. 로그를 통해 grep하여 DHCP 서버의 주소를 찾는 것은 우아하지 않은 것처럼 보이지만 작동합니다. 시작하고 활성화하십시오.
[Unit]
Description=DHCRelay Service
After=network-online.target parprouted_bridge.service
Type=simple

[Service]
ExecStart=/usr/bin/bash -c '/usr/bin/dhcrelay -d -4 -iu wlan0 -id eth0 $(/usr/bin/journalctl -b -u systemd-networkd.service | /usr/bin/grep -Po "via\s+\K\\d+\\.\\d+\\.\\d+\\.\\d+")'

[Install]
WantedBy=multi-user.target

이 접근 방식은 RT5370 칩셋이 장착 된 USB WiFi 어댑터를 사용하는 ArchLinuxArm이 포함 된 Raspberry Pi Model B +에서 나에게 도움이되었습니다. Pi는 이더넷 만있는 프린터에 WiFi를 제공 할 것이기 때문에 거친 처리에 견고하기를 원하므로 다음 단계는 SD 카드를 읽기 전용으로 구성하는 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.