W Arch Linux chciałbym, aby eth0 (podłączony do zmostkowanego routera) współdzielił połączenie otrzymane z wlan0, czytałem tutoriale, ale nie jestem zorientowany na polecenia jak inni użytkownicy i nie do końca rozumiem.
W Arch Linux chciałbym, aby eth0 (podłączony do zmostkowanego routera) współdzielił połączenie otrzymane z wlan0, czytałem tutoriale, ale nie jestem zorientowany na polecenia jak inni użytkownicy i nie do końca rozumiem.
Odpowiedzi:
AKTUALIZACJA
Nie jest możliwe mostkowanie między interfejsem bezprzewodowym (tryb klienta aka stacji) a przewodowymi interfejsami zgodnie z tym wątkiem na linux-ath5k-devel .
Zamiast tego należy ustawić NAT:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Następnie musisz przypisać sobie adresy IP:
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
Zainstaluj serwer dhcp i dodaj następujący tekst do jego pliku konfiguracyjnego (w /etc/dhcpd.conf lub coś podobnego)
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;
}
Następnie uruchom /etc/init.d/dhcpd start
I to wszystko!
brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0
Najpierw tworzysz interfejs mostka. Wybieram dowolną nazwę mybridge, a następnie dodaję do niej interfejsy.
Powinieneś poprosić o nowy adres IP (jest to potrzebne tylko, jeśli chcesz uzyskać prawidłowy adres IP dla samego urządzenia mostkującego):
dhclient -d mybridge
Aby połączyć interfejs WiFi , możesz użyć iw
narzędzia do włączenia 4addr podobnie:
# iw dev <wifiInterface> set 4addr on
to znaczy:
# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported
# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>
Teraz powinno działać. Możesz wyświetlać mosty za pomocą:
# brctl show
4addr
Tryb sprawia, że WiFi zachowuje się wystarczająco jak przewodowy Ethernet, aby mostkowanie działało. Bez tego mostkowanie nie będzie działać bez NAT.
4addr
wymaga, aby obie strony łącza bezprzewodowego go obsługiwały (zakładając, że próbujesz wdrożyć przedłużacz Wi-Fi)
Zależy od tego, jak znaczy dla ciebie AP:
1) Może chcieć widzieć tylko pakiety przychodzące od Ciebie, ze znanym adresem warstwy łącza (a więc nie pakietów zmostkowanych) 2) Może być nawet mądrzejsze i wiedzieć, który adres IP powinien należeć do którego adresu warstwy łącza (przyczyna zna DHCP i sprawdza go)
Jeśli oba 1 + 2 są prawdziwe, potrzebujesz czegoś takiego jak IP NAT, DHCP, ..
Ale jeśli jest to tylko 1), możesz sfałszować adres warstwy łącza i odwrócić mapę na właściwy w przeciwnym kierunku, jak opisano tutaj:
https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC
4addr, jak opisano w innych odpowiedziach, jest z pewnością najlepszym sposobem, jeśli jest obsługiwany przez adapter / sterownik, ale nie wszystkie z nich. NAT może działać w niektórych przypadkach, ale problem z prawidłową komunikacją w obie strony stanie się problematyczny (np. Podłączenie drukarki lub dostęp do innych urządzeń IoT po drugiej stronie NAT). Wszystko, co opiera się na emisji / multiemisji (np. Automatyczne wykrywanie, bonjour) zawiedzie przez NAT.
Alternatywą jest użycie serwera proxy ARP (przetworzonego) zgodnie z opisem w https://wiki.debian.org/BridgeNetworkConnectionsProxyArp . Skonfigurowałem to na Raspberry Pi dla drukarki i działa jak urok (dodałem 10 sekund uśpienia w post-up
poleceniach, aby najpierw otrzymał adres IP, może to mieć związek ze spowolnieniem mojego starego RPi ...)
Bridge wlan i 4addr:
Bridging wlan0 to ból. Zwykle nie można go dodać do interfejsu pomostowego (brctl zwraca „Operacja niedozwolona”), a użycie „zmostkowanego” filtra VirtualBox powoduje duży bałagan konfliktów ARP i DHCP. Powodem tego jest to, że ramki 802.11 domyślnie zawierają tylko trzy adresy: adresy MAC zarówno urządzeń bezprzewodowych (laptopa i AP), jak i końcowego odbiorcy (jak w sieci Ethernet). Zawsze zakłada się, że istnieje tylko jeden pomysłodawca.
802.11 może przenosić czwarty adres MAC nadawcy, który jest używany w trybie WDS przez repeatery. Tę funkcję można włączyć również w systemie Linux, używając iw, a włączenie tego trybu pozwoli na użycie wlan0 w interfejsach mostu, a także w sieci mostkowanej VirtualBox:
iw dev wlan0 set 4addr on
Jednak przy włączonym 4addr, możesz zostać całkowicie zignorowany przez AP: skojarzenie się powiedzie, ale wszystkie ramki danych znikną w eterze. Może to być spowodowane względami bezpieczeństwa (ponieważ cholernie trudno jest sfałszować źródłowy adres MAC. Tak.) W moim routerze (z uruchomionym OpenRG) konieczne jest włączenie trybu „WDS” dla interfejsu bezprzewodowego AP, dodaj urządzenie WDS ograniczone do mojego adres MAC laptopa i dodaj go do mostu LAN. Pakiety 4addr działają teraz.
Jest z tym jednak inny problem - router odrzuca teraz pakiety trzy-adresowe z laptopa, co może być raczej niewygodne (konieczność przełączania 4addr przy każdej zmianie sieci WLAN). Obejściem tego problemu jest dodanie na laptopie drugiego interfejsu bezprzewodowego połączonego z tym samym urządzeniem, ale o innym adresie MAC. Najpierw cofnij wcześniejszą konfigurację:
iw dev wlan0 set 4addr off
Następnie dodaj drugi interfejs - nazwę wybrano dowolnie - z innym adresem 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
Tutaj musi być zgodny adres urządzenia WDS skonfigurowany w routerze; poza tym może to być dowolny prawidłowy adres MAC. Oryginalny MAC wlan0 pozostaje wtedy do „normalnego” użytkowania.
Możliwe jest jednoczesne używanie zarówno wlan0, jak i wds.wlan0 - chociaż testowałem tylko skojarzenie z tym samym AP dwa razy, a nie z różnymi AP. Zgaduję, że musieliby przynajmniej być na tym samym kanale.
Niektóre osoby pytają, dlaczego korzystać z tego, skoro VirtualBox może łączyć WiFi „w porządku”. Odpowiedź jest taka, że VirtualBox nie wysyła adresów MAC maszyn wirtualnych; raczej wykonuje NAT również w warstwie MAC. - 2014-08-22
Bezpośredni most WLAN
W pewnych okolicznościach możesz również użyć wlan_kabel. Wykorzystuje gniazda pakietowe do bezpośredniego mostkowania urządzeń WLAN * z urządzeniami Ethernet. Jednak wlan_kabel może jednocześnie pomostować tylko jeden MAC. Nie ma wady polegającej na blokowaniu przez punkty dostępu, ponieważ używany jest tylko oryginalny MAC urządzenia wlan. W twoim przypadku oznaczałoby to, że wlan0 może być używany tylko przez jedną maszynę wirtualną, a nawet przez hosta. Możesz dostać wlan_kabel tutaj . Jest to podobne do rozwiązania Macvlans .
Łączenie z ipvlan
IP Vlan nie ma ograniczenia mostu, można by go użyć do pomostowania szczegółów sieci, w jaki sposób z niego korzystać można znaleźć tutaj
Alternatywna maskarada
W celu uzyskania mostu można użyć routingu dla systemu Linux z iptables-masquerade i ip_forward, ale jak wspomniano powyżej, wymaga to włączenia ip_forward i sprawi, że linux będzie działał jak router, należy to skonfigurować ostrożnie, ponieważ może to powodować pewne obawy dotyczące bezpieczeństwa.
# 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
Interfejs br0 będzie wtedy miał dostęp do sieci wlan0
Ważne i powiązane
Ponadto, co bardzo ważne, nie należy używać przestarzałych, przestarzałych poleceń, takich jak ifconfig, brctl i tak dalej. Pakiet iproute2 zawiera polecenia do tego wszystkiego, w tym konfigurację interfejsów wirtualnych (coś, do czego kiedyś musieliśmy używać openvpn) i tworzenie mostów. Jeśli nie wiesz, jak skonfigurować mostek z ip, to zaczynamy
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
Za pomocą tego zestawu poleceń tworzymy wirtualny interfejs o nazwie tap0, następnie most o nazwie br0, następnie zniewolimy eth0 i tap0 do mostu, do którego przypisujemy adres IP 10.173.10.1, a następnie przywracamy wszystko. Wymagane są trzy osobne przypadki uruchomienia interfejsów (dla tap0, eth0 i br0).
Sztuką, aby to zadziałało, jest użycie proxy.arp, który pozwala komputerowi (a nie twojemu kontenerowi VM / Linux / przestrzeni nazw) odpowiadać na zapytania ARP zamiast nich.
Innymi słowy, korzystając z przekazywania IPv4 między interfejsem sprzętowym a interfejsem wirtualnym, myślisz, że możesz podłączyć VM / LXC / NNS do sieci LAN, jakby to był interfejs fizyczny, ale to nieprawda: zapominasz absolutnie podstawowy ruch ARP, który naprawdę umożliwia działanie sieci LAN. Problem polega na tym: jeśli poprawnie przekażę ruch IPv4, jak mogę również przekazać ruch ARP, aby moja VM / LXC / NNS działała? Sztuką jest użycie proxy-arp.
Pełna odpowiedź na to pytanie znajduje się na blogu Bohdiego Zazena o odkrywczym tytule: Karty bezprzewodowe Bridge. Używa przestarzałego pakietu, uml-utilities, do stworzenia interfejsu wirtualnego za pomocą polecenia tunctl: jest to jedyne polecenie, do którego używa uml-utilities, dzięki czemu można bezpiecznie zaniedbać pobieranie pakietu i użyć polecenia I napisałem powyżej, aby utworzyć interfejs dotknij lub tun, cokolwiek chcesz, po prostu odpowiednio zmodyfikuj polecenie. następnie utwórz parę veth dla swojego LXC, a teraz stwórz pomost między tap0 i veth0. Ten most, zwany br0, jest tym, dla którego musisz proxy-arp, zamiast prostego interfejsu tap0 opisanego przez Bohdiego Zazena.
Źródła: askubuntu.com , nullroute.eu.org , firejail.wordpress.com , superuser.com
Podobało mi się podejście Proxy Arp , ale pierwotne pytanie określało Arch Linux. Oto wersja implementacji Raspbian dla Arch Linux . Bardzo się starałem dostosować oryginalne podejście z wspomnianej tutaj Debian Wiki do netctl przy użyciu ExecUpPost
i ExecDownPre
bez powodzenia. Wszystko działało w linii poleceń, ale nie w profilu.
Kroki:
IPForward=yes
. Użyłem dostawcy WPA do zarządzania interfejsem sieci bezprzewodowej.enable-reflector=yes
w /etc/avahi/avahi-daemon.conf
; uruchom i włącz, avahi-daemon.service
jeśli jeszcze nie jest.[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
To podejście zadziałało w przypadku Raspberry Pi Model B + w / ArchLinuxArm ze złączem USB WiFi z mikroukładem RT5370. Ponieważ Pi będzie zapewniać Wi-Fi drukarce z tylko ethernetem, chciałbym, aby była odporna na zgrubną obsługę, więc moim następnym krokiem będzie skonfigurowanie karty SD jako tylko do odczytu .