Wlan0 ile eth0 arasındaki köprü


25

Arch Linux'ta, eth0 (köprülü yönlendiriciye bağlı) wlan0'dan alınan bağlantıyı paylaşmak istiyorum, öğreticiler okudum ama diğer kullanıcılar olduğu gibi anlayışlı değilim ve tamamen anlamadım.


8
Lütfen soruya veya başlığa '[çözüldü]' yazmayın, bir cevabı kabul etmek bir sorunun çözüldüğünü göstermenin doğru yoludur. Doğru olarak işaretlediğiniz cevabın üzerindeki yeşil onay işaretini koymanın yanı sıra, sorunun ana listede görüntülenme şeklini de değiştirir.
Zypher

1
Kimse bu sayfa ile uğraşmazsa sevinirim. Herhangi bir sorunuz varsa, benimle iletişime geçin. Teşekkür ederim.
dbdii407

13
serverfault.com/faq Spesifik olarak "Diğer insanlar eşyalarımı düzenleyebilir" başlığı
Zypher

@Zypher Bağlandığınız URL artık mevcut değil. İlgili paragraf başka bir yere mi taşındı?
kasperd

Yanıtlar:


24

GÜNCELLEŞTİRME

Linux-ath5k-devel'de bu konuya göre kablosuz (istemci aka istasyon modu) ve kablolu arayüzler arasında köprü oluşturmak mümkün değildir .

NAT kurulumu

Biri bunun yerine NAT kurmalı:

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

IP Atama

O zaman kendinize IP adresleri atamanız gerekir:

ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up

Dhcp daemon'u yükleyin

Bir dhcp sunucusu kurun ve aşağıdaki metni config dosyasına ekleyin (/etc/dhcpd.conf içinde veya benzeri bir şeyde)

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'yi başlat

Sonra /etc/init.d/dhcpd start 'ı başlatın.

Ve bu kadar!

Yalnızca çalışmayan köprüleme kurulumuyla ilgileniyorsanız aşağıdakileri okuyun


brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0

Öncelikle bir köprü arayüzü oluşturursunuz, keyfi bir isim seçerim sonra köprüye arayüzleri eklerim.

Yeni bir ip adresi istemeniz gerekir (Bu, yalnızca köprüleme aygıtı için geçerli bir IP almak istiyorsanız gereklidir):

dhclient -d mybridge

3
Köprünün çalışması için köprü arayüzü için aslında bir IP adresine ihtiyacınız yok.
Massimo

7
mybridge köprüsüne wlan0 ekleyemiyorum: İşlem desteklenmiyor
dbdii407

1
@Massimo: evet bu doğru. Ağa "köprüleme cihazı" ndan ulaşmak için geçerli IP gereklidir.
cstamas

10
NAT, köprülemeden tamamen farklı bir şeydir. Köprüleme ikinci katmandır, NAT üçüncü katmandır ve IPv4'e özgüdür. Bunun neden kabul edilmiş bir cevap olduğunu anlamıyorum.
WhyNotHugo

3
@Hugo IP NAT katman 3, ancak MAC NAT katman 2'dir. WiFi köprülemesi için, 4addr, WDS, MAC NAT kullanabilir veya katman 3'te (IP NAT gibi) bir şey yapabilirsiniz.
David Schwartz

27

İçin wifi köprü kullanabileceğiniz bir arayüz iwaracı 4addr etkinleştirmek aynı şekilde:

# iw dev <wifiInterface> set 4addr on

yani:

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

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

Şimdi çalışması gerekiyor. Aşağıdakileri kullanarak köprüleri gösterebilirsiniz:

# brctl show

2
Bu ayar ne için ve neden bu senaryoda kullanılmasını özellikle öneriyorsunuz?
hakre

Bu, wlan0 arabirimini köprü arabirimine eklemeye çalışırken "İşleme izin verilmedi" hatası için bir çözümdür. Bundan sonra başlangıçtan sonra açılmak için / etc / network / interfaces içindeki köprü arayüzünü belirtmeniz gerekir.
Str82DHeaD

1
@hakre Bu 4addrmod WiFi bağlantısının çalışacağı kablolu Ethernet gibi davranmasını sağlar. Onsuz, köprüleme NAT olmadan çalışmaz.
David Schwartz

1
4addrbir kablosuz bağlantının her iki tarafının da desteklemesini gerektirir (bir wifi genişleticiyi uygulamaya çalıştığınızı varsayarsak)
16'da

5

AP'nin sizin için ne kadar önemli olduğuna bağlı olarak:

1) Sadece sizden gelen paketleri görmek, bilinen bağlantı katmanı adresinizle (ve dolayısıyla köprülü paketlerden değil) görmek isteyebilir 2) Aslında daha akıllı olabilir ve hangi IP adresinin hangi bağlantı katmanı adresine ait olduğunu bilmeniz gerekebilir (neden DHCP'yi bilir ve denetler)

1 + 2 ikisi de doğruysa, gerçekten IP NAT, DHCP, .. gibi bir şeye ihtiyacınız var.

Ancak durum sadece 1) ise, bağlantı katmanı adresini taklit edebilir ve burada açıklandığı şekilde diğer taraftaki doğru haritayı ters yönde eşleyebilirsiniz:

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


Bu gerçekten dağınık. Ve her yeni bilgisayar eklediğinizde ekstra kurulum gerektirir.
Michael Hampton

4

4addr, diğer cevaplarda da açıklandığı gibi, adaptör / sürücü tarafından desteklendiğinde kesinlikle en iyi yoldur, ancak hepsinde yoktur. NAT bazı şeyler için işe yarayabilir, ancak şerit üzerinde her iki yönde de düzgün iletişim kurmak sorunlu hale gelecektir (örneğin, bir yazıcıyı bağlamak veya NAT'ın diğer tarafındaki diğer IoT cihazlarına erişmek). Yayın / çok noktaya yayın kullanan herhangi bir şey (ör. Otomatik bulma, bonjour) NAT üzerinden başarısız olur.

Alternatif, https://wiki.debian.org/BridgeNetworkConnectionsProxyArp . Bunu bir yazıcı için bir Raspberry Pi'ye ayarladım ve cazibeye benziyor ( post-upÖnce bir IP adresi alabilmesi için komutlara 10 saniyelik bir uyku ekledim , eskilerin yavaşlığı ile ilgili olabilir) RPI ...)


proxy-arp artı dhcp-yardımcı çözümüne bu bağlantı şu ana kadar gördüğüm en uyumlu ve en temiz çözüm.
minghua

3

Köprü wlan ve 4addr:

WLAN0 köprüleme bir acıdır. Normalde bir köprü arayüzüne ekleyemezsiniz (brctl, "İşlem izin verilmiyor" değerini döndürür) ve "Kutu köprülü" süzgecini kullanarak, büyük bir ARP ve DHCP çakışması karmaşasına yol açar. Bunun nedeni, 802.11 çerçevelerinin varsayılan olarak yalnızca üç adres içermesidir: hem kablosuz cihazların (dizüstü bilgisayar ve AP) hem de son alıcının (Ethernet'te olduğu gibi) MAC adresleri. Her zaman tek bir olası yaratıcının olduğu varsayılır.

802.11 dördüncü, göndericinin MAC adresini taşıyabilir ve bu WDS modunda tekrarlayıcılar tarafından kullanılır. Bu özellik iw kullanılarak Linux'ta da etkinleştirilebilir ve bu modun etkinleştirilmesi wlan0'ın köprü arayüzlerinde ve VirtualBox köprülü ağlarda kullanılmasına izin verir:

iw dev wlan0 set 4addr on

Bununla birlikte, 4addr etkinken, AP: ilişkilendirme işlemi tarafından tamamen göz ardı edilirsiniz ancak tüm veri çerçeveleri eter içinde kaybolur. Bu güvenlik nedeniyle olabilir (kaynak MAC adresini bozmak çok zor çünkü.). Yönlendiricimde (OpenRG çalışıyor), kablosuz AP arayüzü için "WDS" modunu etkinleştirmek gerekli, benim cihazımla sınırlı bir WDS cihazı ekleyin. dizüstü bilgisayarın MAC adresini ve LAN köprüsüne ekleyin. 4addr paketler şimdi çalışıyor.

Yine de bununla ilgili başka bir sorun var - yönlendirici şimdi dizüstü bilgisayardan üç adresli paketleri reddediyor, bu durum oldukça elverişsiz olabilir (WLAN ağı her değiştiğinde 4addr geçiş yapmak zorunda kaldı). Çözüm, dizüstü bilgisayarda, aynı aygıta bağlı, ancak farklı bir MAC adresiyle ikinci bir kablosuz arabirim eklemektir. İlk önce önceki yapılandırmayı geri alın:

iw dev wlan0 set 4addr off

Ardından, ikinci bir arabirim ekleyin - ad isteğe bağlı olarak seçildi - farklı bir MAC adresiyle:

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

Burada yönlendiricide yapılandırılan WDS cihaz adresiyle eşleşmelidir; bunun dışında herhangi bir geçerli MAC adresi olabilir. Wlan0'ın orijinal MAC'i daha sonra "normal" kullanım için kalır.

Hem wlan0 hem de wds.wlan0'ı aynı anda kullanmak mümkündür - her ne kadar aynı AP ile ilişkilendirmeyi farklı AP'lerle değil, iki kez test ettim. En azından aynı kanalda olmaları gerekeceğini tahmin ediyorum.

Bazıları, VirtualBox'un WiFi'yi "gayet iyi" bir şekilde köprüleyebilmesi için neden bunu kullandığını sordu. Cevap, VirtualBox'ın sanal makinelerin MAC adreslerini göndermemesidir; bunun yerine, NAT'ı MAC katmanında da gerçekleştirir. - 2014-08-22

Doğrudan wlan köprüsü

Bazı şartlar altında wlan_kabel'i de kullanabilirsiniz. WLAN * cihazlarını ethernet aygıtlarıyla doğrudan köprülemek için paket soketleri kullanır. Ancak, wlan_kabel ile aynı anda yalnızca bir tane MAC köprüleyebilirsiniz. Erişim noktaları tarafından engellenme dezavantajı yoktur, çünkü sadece wlan cihazının orijinal MAC'si kullanılır. Senin durumunda bu, wlan0'ın sadece bir VM tarafından kullanılabileceği ve hatta ana bilgisayar tarafından bile kullanılamayacağı anlamına gelir. Wlan_kabel'i buradan alabilirsiniz . Bu macvlans çözümüne benzer .

İpvlan ile köprü oluşturma

IP Vlan, burada nasıl kullanılacağına ilişkin bir ağ detayını köprülemek için kullanılabilecek bir köprü sınırlamasına sahip değildir.

Maskeli balo alternatif

Linux yönlendirme yerine bir köprü elde etmek için iptables-masquerade ve ip_forward yerine kullanılabilir, ancak bunun da belirtildiği gibi ip_forward özelliğini etkinleştirmesi gerekir ve linux'un bir yönlendirici gibi hareket etmesini sağlar, çünkü bazı güvenlik endişeleri getirebileceği için dikkatle kurulum yapılması gerekir.

# 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 arayüzü wlan0 ağına erişebilecek.

Önemli ve ilgili

Ayrıca, ve çok önemli, ifconfig, brctl , vb. Gibi eski, kullanımdan kaldırılmış komutları kullanmamalısınız . İproute2 paketi, sanal arabirimler (bir zamanlar openvpn kullanmak zorunda olduğumuz bir şey) ve köprüler oluşturmak da dahil olmak üzere tüm komutları içerir. İp ile köprü kurmayı bilmiyorsanız, işte başlıyoruz

  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

Bu komut dizisiyle, tap0 adında sanal bir arabirim, sonra br0 adında bir köprü, daha sonra eth0 olarak köleleştirilir ve 10.173.10.1 IP adresini atadığımız köprüye tap0 komutunu veririz. Arabirimleri yukarı getirmenin üç ayrı örneği (tap0, eth0 ve br0 için) gereklidir.

Bu işi yapmanın püf noktası, PC'nizin (VM / Linux konteyner / ağ ad alanınız değil) kendi ARP sorgularını yanıtlamalarına izin veren proxy.arp'ı kullanmaktır.

Başka bir deyişle, donanım arabiriminiz ve sanal arabiriminiz arasında IPv4 iletme özelliğini kullanarak VM / LXC / NNS'nizi LAN'ınıza fiziksel bir arabirimmiş gibi bağlayabileceğinizi düşünürsünüz, ancak bu doğru değil: LAN'ın çalışmasına gerçekten izin veren temel ARP trafiği. Öyleyse sorun şudur: IPv4 trafiğini doğru iletirsem, VM / LXC / NNS'in çalışabilmesi için ARP trafiğini nasıl iletebilirim? Hile proxy-arp kullanmaktır.

Bunun tam cevabı Bohdi Zazen'in Blog'unda , başlığın açıklanmasıyla: Bridge kablosuz kartları. Tunctl komutuyla sanal bir arabirim oluşturmak için eski bir paket olan uml-utilities kullanır: bu, uml-utilities kullandığı tek komuttur, böylece paketi indirmeyi güvenle ihmal edebilirsiniz ve İstediğiniz gibi, bir musluk veya tun arayüzü oluşturmak için yukarıda yazdı, sadece komutu buna göre değiştirin. sonra LXC'niz için bir veth çifti oluşturun ve şimdi tap0 ve veth0 arasında bir köprü oluşturun. Br0 olarak adlandırılan bu köprü, Bohdi Zazen tarafından açıklanan basit tap0 arabirimi yerine proxy-arp için gerekenler.


Kaynaklar: askubuntu.com , nullroute.eu.org , firejail.wordpress.com , superuser.com


0

Proxy Arp yaklaşımını beğendim ancak asıl soru Arch Linux'u belirtti. İşte bir Raspbian uygulamasının Arch Linux versiyonu . Adapte için çok sıkı çalıştı Debian Wiki orijinal bir yaklaşım söz buraya kadar NetCTL kullanarak ExecUpPostve ExecDownPrebaşarılı olamadı. Her şey komut satırında çalıştı ancak profil içinde çalışmadı.

Adımlar:

  1. Systemd-networkd ile kablosuz ağ kurma . . Network dosyasında ayarlayın IPForward=yes. Kablosuz ağ arayüzünü yönetmek için WPA Supplicant'ı kullandım .
  2. Ayarlayarak geçişi mDNS'yi etkinleştirme enable-reflector=yesiçinde /etc/avahi/avahi-daemon.conf; başlamadıysanız, etkinleştirin ve etkinleştirin avahi-daemon.service.
  3. AUR'dan parprouted kurun ve Raspbian'in cevabına uyarlayarak bunun için bir servis dosyası oluşturun . Arayüzü umut verici olacak şekilde ayarlamanın gerekli olduğunu bulamadım. Doğal olarak, bu hizmetin başlatılması ve etkinleştirilmesi gerekecek.
[Unit]
Description=proxy arp routing service
Documentation=/raspberrypi//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. Ethernet portuna bağlı cihaz için DHCP'yi desteklemek için bir DHCRElay (DHCP paketinden) servisi oluşturun. DHCP sunucusunun adresini günlükler arasında dolaşarak bulmak tuhaf görünüyor, ama işe yarıyor. Başlat ve etkinleştir.
[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

Bu yaklaşım benim için bir Ahududu Pi Model B + w / ArchLinuxArm üzerinde RT5370 yonga seti ile bir USB WiFi adaptörünü kullanarak çalıştı. Pi bir yazıcıya sadece ethernet ile WiFi sağlayacağı için, zorlu kullanım için sağlam olmasını istiyorum, bu yüzden bir sonraki adımım SD kartı salt okunur olarak yapılandırmak olacak .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.