기존 WiFi에서 이더넷으로의 투명 브리지?

기존 WiFi에서 이더넷으로의 투명 브리지?

자체 DHCP 서버 등을 사용하여 브리지를 다른 라우터로 전환하는 사례를 많이 보았습니다. 그런데 유선 장치를 원래 라우터에 직접 연결된 것처럼 사용하고 싶습니다. 브리지 머신은 문제 없이 자체적으로 WiFi에 연결됩니다.

이 답변내가 원하는 것에 가깝지만 다음과 같이 말합니다.The wlan0 interface also has to be condigured to connect to your remote AP so this configuration is not be used verbatim.

경고에 나와 있듯이 자체적으로 작동하지 않습니다. WiFi 어댑터를 찾을 수 없어 연결할 수 없지만 원래 작동 중인 연결을 다시 설정하는 방법은 나와 있지 않습니다. 어떻게 해야 하나요?


/etc/wpa_supplicant/wpa_supplicant.conf예:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US

network={
    ssid="MyNetwork"
    psk="MyPassword"
    key_mgmt=WPA-PSK
}

WiFi가 작동 중일 때 /etc/network/interfaces기본값은 다음과 같습니다.

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

결과 ifconfig:

pi@FCC-FOH:~ $ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:4c:6c:a7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.35  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::c39b:c8ac:86c9:1f0e  prefixlen 64  scopeid 0x20<link>
        inet6 2600:100a:b02f:8196:b8ae:3d20:c4d0:817c  prefixlen 64  scopeid 0x0<global>
        ether 00:f0:00:36:1f:1a  txqueuelen 1000  (Ethernet)
        RX packets 17  bytes 1955 (1.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 52  bytes 7956 (7.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

pi@FCC-FOH:~ $ 

브리지를 활성화하려고 하면 /etc/network/interfaces다음과 같습니다.

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual

auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0

결과 ifconfig:

pi@FCC-FOH:~ $ ifconfig
br0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:4c:6c:a7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:4c:6c:a7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:f0:00:36:1f:1a  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

pi@FCC-FOH:~ $ 

답변1

좋아, 여기서 가장 큰 문제는 통신 문제라고 생각합니다. 사용하고 있는 용어는 원하는 결과(WLAN이 없는 장치 A가 있습니다. 두 번째 장치를 통해 WLAN 라우터에 연결하면 WLAN의 다른 모든 장치에서 액세스할 수 있으며 그 반대의 경우도 마찬가지입니다. 그러면 물론 당신은 당신이 원하는 것(당신의 X)이 아닌 특정한 의미를 가진 용어(질문에서 XY, Y)를 따르는 답을 얻게 됩니다.

이것이 바로 XY 질문의 핵심입니다. Y 대신 X를 요청하면 정답을 얻게 됩니다. Y라고 묻는다면 사람들은 정확하게 대답할 수 없습니다.

이제 몇 가지 네트워킹 기본 사항을 살펴보겠습니다. 이것개방형 시스템 상호 연결 모델네트워크의 여러 계층을 설명합니다. 레이어 2는 이더넷/WiFi 레이어입니다. 장치는 MAC 주소로 식별되며, 모든 장치가 서로를 볼 수 있고 해당 네트워크 세그먼트에서 서로 통신할 수 있는 네트워크 세그먼트(브로드캐스트 도메인이라고도 함)가 있습니다. 메시지를 보내세요. 반면에 레이어 3은 인터넷(IP) 주소를 사용합니다.

브리징두 개의 레이어 2 세그먼트가 단일 레이어 2 세그먼트로 표시되도록 연결하는 것을 나타냅니다(따라서 이전 두 세그먼트 모두에서 레이어 2 브로드캐스트를 볼 수 있음).라우팅레이어 3에서 패킷의 다음 대상을 찾은 다음 레이어 2의 해당 대상으로 패킷을 전달하여 두 개의 레이어 2 세그먼트가 연결되었음을 나타냅니다.

오늘날의 WLAN은 여러 액세스 포인트(라고 함)를 허용하도록 설계되었습니다.분배 체계(DS)):

<--- SEGMENT (DS) --->  <- SEGMENT ->
       
    LAN         WLAN        LAN 
     |      
     |           .....C1------------D
     |---- B1 ....
A----|           .....C2
     |
     |---- B2 ..
     |

A는 DS의 게이트웨이, B1과 B2는 액세스 포인트(AP), C1과 C2는 워크스테이션(STA), D는 LAN을 통해 C1에 연결된 컴퓨터이다.

조금 단순화하기 위해 "패킷"(802.11 프레임WLAN을 통해 전송됨)에는 A, B, C(3주소 모드)의 MAC 주소가 포함되어 있습니다. 따라서 AP는 WLAN과 LAN 어댑터를 브리지하여 단일 네트워크 세그먼트를 형성할 수 있습니다. C가 계층 2 패킷을 A에 직접 보내려는 경우 AP는 B와 연결되어 있음을 알고 있으므로 주소(A, B, C) 가방에 있는 데이터에. B는 패킷을 수신하면 최종 목적지가 A임을 확인하고 브리지된 LAN 인터페이스를 통해 다시 보낼 수 있습니다. 다른 방향으로도 마찬가지입니다.

이제 STA C가 LAN과 WLAN을 연결하는 동일한 작업을 시도하면 어떻게 될까요? 그러면 D가 A에게 레이어 2 데이터 패킷을 보낼 때 C는 WLAN 데이터 패킷에 어떤 주소를 넣어야 할까요? (A,B,D)를 넣을 수 있습니다. 통신이 암호화되지 않은 경우 AP B는 "야, 이 패킷은 D에서 왔지만 나는 D와 연결되어 있지 않습니다. 따라서 이 패킷에 문제가 있는 것 같습니다. 삭제하겠습니다"라고 말합니다. 더 나쁜 것은 통신이 암호화된 경우(현재 표준이어야 함) AP와 STA 간에 키가 협상된다는 것입니다. 하지만 C는 <B,C>키만 갖고 있고, <B,D>키는 갖고 있지 않습니다. 따라서 이 패킷은 올바르게 암호화될 수 없습니다.

C가 자신의 MAC 주소만 입력하면 어떻게 되나요? 그런 다음 데이터 패킷의 경우도착하다D, 결국 C에도 전송됩니다. 따라서 C는 D에게 패킷을 전달하는 것과 이러한 패킷 자체를 수락하는 것을 구별하는 방법을 결정해야 합니다. 레이어 2에는 이 결정의 기반이 되는 정보가 많지 않기 때문에 이를 수행하기가 어렵습니다. 그렇기 때문에 이 경우 결국 C는 "사라지고" D는 B와 직접 연결되어 있는 것처럼 보입니다. WLAN_KABEL이 구현한 솔루션입니다. 이 결정의 변형은 사용되는 (계층 3) 포트 등에 따라 달라집니다.

또 다른 옵션은 (A,B,C) 대신 관련된 모든 주소(A,B,C,D)를 입력하는 것입니다. 이를 4-주소 모드라고 하며, 때로는 WDS라고도 합니다. 주의하세요. WDS는 유사한 작업을 수행하기 위해 다른 독점 방식으로도 사용됩니다.

이제 STA에서 LAN과 WLAN을 브리지할 수 있는 이유를 알았습니다.

당신이 원하지 않는다면다리, 표시된 대로 조각을 유지하는 한 모든 것이 간단해집니다.노선, A와 모든 B의 D에 대한 적절한 (정적) 라우팅 테이블을 추가하면 도달 가능해집니다. 레이어 3 IP 주소는 세그먼트로 할당되므로 주소 범위만 다릅니다. 예를 들어 A가 192.168.23.1, B1이 192.168.23.2, B2가 192.168.23.3, C1이 192.168.23.100, C2가 192.168.23.101이라고 가정하면 WLAN 세그먼트는 192.168.23.0/24입니다. 네트워크 세그먼트 C1은 10.0.0.1이고 네트워크 세그먼트 D는 10.0.0.2입니다. 그런 다음 C2는 "계층 3 패킷을 10.0.0.2로 보내세요"라고 말하면 정상적으로 도착합니다. NAT가 필요하지 않습니다.

대부분의 홈 네트워크에는 AP가 하나만 있으며(여러 AP를 올바르게 설정하는 방법을 아는 사람은 거의 없으며 여러 AP를 원하는 경우 이중 NAT와 같은 끔찍한 작업을 수행합니다) 집 라우터는 A와 B를 하나의 장치로 결합합니다. 그러나 계약은 위에서 설명한 대로 유지됩니다.

호텔과 같은 장소에서 설명된 대로 전문가가 설치한 여러 개의 AP를 찾을 수 있습니다.

답변2

알겠어요! 약간의 조정만 필요합니다이 출발점, 한 방향으로는 번역되지만 다른 방향으로는 번역되지 않는 것으로 보입니다. 딸깍 소리가 나도록 다른 방향을 채워주세요.

분명히 아직 완전히 이해하지 못하는 이유로 이러한 브리지에서 DHCP를 사용할 수 없지만(유선 장치가 WiFi 네트워크에 연결되어 있음) 브리지와 장치에 대한 고정 주소에 동의하면 일하다. 이것이 내가 하는 방법이다:


다음 항목에 추가하세요 /etc/network/interfaces.

auto eth0
auto lo wlan0
iface lo inet loopback

# We're going to play router on this interface, so set that address
iface eth0 inet static
    address 192.168.3.1
    netmask 255.255.255.0

# Setup WiFi and take a static address, so we know the context
allow-hotplug wlan0
iface wlan0 inet static
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    address 192.168.2.5
    netmask 255.255.255.0
    gateway 192.168.2.1

# Take a second address, so we can bridge it to the single device at 192.168.3.x
iface wlan0 inet static
    address 192.168.2.6

다음 항목에 추가하세요 /etc/rc.local.

# Match settings in /etc/network/interfaces
IP_THIS="192.168.2.6"
IP_OTHR="192.168.3.6"

# Actual work
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING  -d $IP_OTHR -i  eth0 -j DNAT --to-destination $IP_THIS
iptables -t nat -A PREROUTING  -d $IP_THIS -i wlan0 -j DNAT --to-destination $IP_OTHR
iptables -t nat -A POSTROUTING -s $IP_THIS          -j SNAT --to-source      $IP_OTHR
iptables -t nat -A POSTROUTING -s $IP_OTHR          -j SNAT --to-source      $IP_THIS

/etc/wpa_supplicant/wpa_supplicant.conf다음 사항을 포함했는지 확인하세요 .

network={
    ssid="MyNetwork"
    psk="MyPassword"
    key_mgmt=WPA-PSK
}

그래픽 유틸리티를 통해 이미 연결되어 있다면 이미 있을 수도 있지만 어쨌든 확인하십시오. 네트워크 요구 사항에 따라 수정하세요.


브리지 장치를 정적으로 설정합니다.

address: 192.168.3.6
netmask: 255.255.255.0
gateway: 192.168.3.1

대상이 있는 경우 192.168.2.x해당 네트워크에 직접 있는 것처럼 네트워크에 있습니다.

자신의 서브넷 외부와 통신하는 것이 이상해 보이지만 브리지가 ( iptables)를 변환하면 결과가 정확합니다.

마찬가지로 브리지 장치와 통신하기 위해 브리지의 두 번째 주소(실제 주소가 아닌)를 사용하도록 기본 네트워크의 모든 항목을 구성합니다.


크로스오버 케이블을 사용하여 장치를 브리지에 연결하고 브리지를 다시 시작한 후에는 "작동"해야 합니다. (또는 적어도 나에게는 그렇습니다)

결과 구조는 다음과 같습니다.

Router:
addr: 192.168.2.1
ssid: MyNetwork
pass: MyPassword
auth: WPA2
dhcp: 100+

Target for Bridged Device
addr: 192.168.2.2

Bridge
addr: 192.168.2.5 (WiFi primary - used for the Bridge Machine itself)
addr: 192.168.2.6 (WiFi secondary - forwards to Bridged Device)
addr: 192.168.3.1 (Wired - "plays router" for Bridged Device)

Bridged Device
addr: 192.168.3.6

물론 원하는 경우 이러한 주소를 변경할 수 있지만 올바른 주소를 유지해야 합니다.

관련 정보