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.
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.
Yanıtlar:
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 .
Biri bunun yerine NAT kurmalı:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
O zaman kendinize IP adresleri atamanız gerekir:
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
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;
}
Sonra /etc/init.d/dhcpd start 'ı başlatın.
Ve bu kadar!
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
İçin wifi köprü kullanabileceğiniz bir arayüz iw
aracı 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
4addr
mod WiFi bağlantısının çalışacağı kablolu Ethernet gibi davranmasını sağlar. Onsuz, köprüleme NAT olmadan çalışmaz.
4addr
bir kablosuz bağlantının her iki tarafının da desteklemesini gerektirir (bir wifi genişleticiyi uygulamaya çalıştığınızı varsayarsak)
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
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 ...)
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
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 ExecUpPost
ve ExecDownPre
başarılı olamadı. Her şey komut satırında çalıştı ancak profil içinde çalışmadı.
Adımlar:
IPForward=yes
. Kablosuz ağ arayüzünü yönetmek için WPA Supplicant'ı kullandım .enable-reflector=yes
içinde /etc/avahi/avahi-daemon.conf
; başlamadıysanız, etkinleştirin ve etkinleştirin avahi-daemon.service
.[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
[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 .