З'єднання 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-адреса для мостового інтерфейсу, щоб мости працювати.
Массімо

7
не можна додати wlan0 до мосту mybridge: Операція не підтримується
dbdii407

1
@Massimo: так, це правда. Дійсний IP необхідний для отримання доступу до мережі з "мостового пристрою".
cstamas

10
NAT - це щось зовсім інше, ніж мости. З'єднання - це шар другого рівня, NAT - рівень три і специфічний для IPv4. Я не розумію, чому це прийнята відповідь.
WhyNotHugo

3
@Hugo IP NAT - це шар 3, але MAC NAT - шар 2. Для мостів WiFi ви можете використовувати 4addr, WDS, MAC NAT або ви можете зробити щось на рівні 3 (наприклад, IP NAT).
Девід Шварц

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
Для чого це налаштування і чому ви конкретно пропонуєте використовувати його в цьому сценарії?
хакре

Це рішення для помилки "Операція не дозволена" при спробі додати інтерфейс wlan0 до інтерфейсу моста. Після цього вам потрібно вказати інтерфейс мосту в / etc / network / інтерфейсах, щоб бути запущеним після запуску.
Str82DHeaD

1
@hakre 4addrРежим змушує WiFi вести себе досить, як провідний Ethernet, що мостинг працюватиме. Без нього мости не працюватимуть без NAT.
Девід Шварц

1
4addrвимагає, щоб обидві сторони бездротового зв’язку підтримували його (припускаючи, що ви намагаєтеся реалізувати розширення Wi-Fi)
nhed

5

Залежить від того, наскільки погане для вас AP:

1) Можливо, захочеться бачити лише пакети, що надходять від вас, з відомою вами адресною версією посилань (а значить, не зв'язаними пакетами) 2) Насправді вона може бути ще розумнішою, і знати, яка IP-адреса повинна належати до адреси адреси рівня посилання (причина він знає DHCP і перевіряє його)

Якщо 1 + 2 істинні, вам дійсно потрібно щось на зразок IP NAT, DHCP, ..

Але якщо це лише 1), ви можете підробити адресу шару посилання та повернути його на потрібне в іншому напрямку, як описано тут:

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


Це справді безладно. І це вимагає додаткових налаштувань щоразу, коли ви додаєте новий комп'ютер.
Майкл Хемптон

4

4addr, як описано в інших відповідях, безумовно, найкращий спосіб, коли він підтримується адаптером / драйвером, але не всі вони. NAT може працювати для деяких речей, але отримати належну комунікацію в обох напрямках на LAN стане проблематично (наприклад, підключення принтера або доступ до інших пристроїв IoT з іншого боку NAT). Все, що покладається на трансляцію / багатоадресну передачу (наприклад, автоматичне відкриття, bonjour), пройде через NAT.

Альтернативою є використання проксі-сервера ARP (парпурований), як описано в https://wiki.debian.org/BridgeNetworkConnectionsProxyArp . Я встановив це на Raspberry Pi для принтера, і він працює як шарм (я додав 10-секундний сон у post-upкоманди, щоб дозволити йому отримати IP-адресу спочатку, це може мати відношення до повільності моєї старої RPi ...)


це посилання на рішення проксі-арп плюс dhcp-helper є найбільш сумісним і найчистішим рішенням, яке я бачив.
minghua

3

Міст і 4addr:

З'єднання wlan0 - це біль. Зазвичай ви не можете додати його до мостового інтерфейсу (brctl повертає "Операція не дозволена"), а використання "мостового" фільтра VirtualBox призводить до великого безладу конфліктів ARP та DHCP. Причиною цього є те, що 802.11 кадри містять лише три адреси за замовчуванням: MAC адреси як бездротових пристроїв (ноутбук та AP), так і кінцевого одержувача (як в Ethernet). Завжди передбачається, що існує лише один можливий джерело.

802.11 може містити MAC-адресу четвертого, оригінатора, і це використовується в режимі WDS ретрансляторами. Цю функцію можна ввімкнути і в Linux, використовуючи iw, і включення цього режиму дозволить використовувати wlan0 у мостових інтерфейсах, а також у мостових мережах VirtualBox:

iw dev wlan0 set 4addr on

Однак з увімкненою 4addr ви, ймовірно, повністю ігноруєте AP: асоціація вдається, але всі кадри даних зникають в ефір. Це може бути з міркувань безпеки (тому що чорт важко підробити MAC-адресу джерела. Так.) У моєму маршрутизаторі (працює OpenRG) потрібно включити режим "WDS" для бездротового інтерфейсу AP, додати пристрій WDS, обмежений моїм MAC-адреса ноутбука та додайте її до мосту локальної мережі. Зараз працюють пакети 4addr.

З цим є ще одна проблема - маршрутизатор тепер відхиляє пакети трьох адрес з ноутбука, що може бути досить незручно (доводиться перемикати 4addr щоразу, коли мережу WLAN змінюється). Вирішення проблеми полягає в тому, щоб додати на ноутбуці другий бездротовий інтерфейс, підключений до того ж пристрою, але з іншою 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-адреса. Оригінальний MAC wlan0 потім залишається для "нормального" використання.

Можна одночасно використовувати і wlan0, і wds.wlan0, хоча я лише два рази перевіряв асоціацію з тим же AP, а не з різними AP. Я здогадуюсь, що їм потрібно було б хоча б бути на одному каналі.

Деякі люди запитують, навіщо використовувати це, коли VirtualBox може передати WiFi "просто чудово". Відповідь полягає в тому, що VirtualBox не надсилає MAC-адреси віртуальної машини; швидше, він виконує NAT і на шарі MAC. - 2014-08-22

Прямий міст Улана

За певних обставин ви також можете використовувати wlan_kabel. Він використовує пакетні розетки, щоб безпосередньо передати wlan * -пристрої з Ethernet-пристроями. Однак ви можете одночасно з'єднати один єдиний MAC за допомогою wlan_kabel. У нього немає недоліку, якщо його забороняють точки доступу, оскільки використовується лише оригінальний MAC пристрою wlan. У вашому випадку це означатиме, що wlan0 може використовуватись лише одним ВМ, а не хостом. Ви можете отримати wlan_kabel тут . Це схоже на розчин маквлана .

З’єднання з ipvlan

IP Vlan не має обмеження мосту, який би використовувався для перенесення деталей мережі про те, як його використовувати, можна знайти тут

Альтернатива маскараду

Маршрутизацію Linux можна використовувати замість iptables-masquerade та ip_forward для досягнення мосту, але, як згадувалося, для цього потрібно ввімкнути ip_forward і змусити Linux діяти як маршрутизатор.

# 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).

Хитрість зробити цю роботу полягає у використанні proxy.arp, який дозволяє вашому ПК (не вашому VM / Linux контейнеру / мережевому простору імен) відповідати на запити ARP замість них.

Іншими словами, використовуючи переадресацію IPv4 між вашим апаратним інтерфейсом та віртуальним інтерфейсом, ви думаєте, що можете підключити свій VM / LXC / NNS до локальної мережі так, як якщо б це був фізичний інтерфейс, але це неправда: ви абсолютно забуваєте фундаментальний трафік ARP, саме це дійсно дозволяє локальній мережі працювати. Отже, проблема полягає в тому, що: якщо я правильно пересилаю трафік IPv4, як я можу також пересилати трафік ARP, щоб мій VM / LXC / NNS працював? Хитрість полягає у використанні проксі-арп.

Повна відповідь на це - у Блозі Бохді Зазена з викривчою назвою: Bridge wireless cards. Він використовує застарілий пакет, uml-утиліти, щоб створити віртуальний інтерфейс за допомогою команди tunctl: це єдина команда, для якої він використовує uml-утиліти, так що ви можете сміливо нехтувати завантаженням пакета та використовувати команду I писав вище, щоб створити інтерфейс для натискання або налаштування, залежно від того, що вам подобається, просто змініть команду відповідно. потім створіть пару для VX для свого LXC, а тепер створіть міст між tap0 і veth0. Цей міст, який називається br0, - це те, що вам потрібно проксі-арп, замість простого інтерфейсу tap0, описаного Богда Зазен.


Джерела: askubuntu.com , nullroute.eu.org , firejail.wordpress.com , superuser.com


0

Мені сподобався підхід Proxy Arp , але в оригінальному питанні було вказано Arch Linux. Ось версія Linux Linux для програми Raspbian . Я дуже намагався адаптувати оригінальний підхід із згаданої тут Debian Wiki до netctl з використанням ExecUpPostта ExecDownPreбез успіху. Все працювало в командному рядку, але не в профілі.

Етапи:

  1. Реалізація бездротових мереж із системними мережами . У файлі .network встановіть IPForward=yes. Я використовував WPA Supplicant для управління інтерфейсом бездротової мережі.
  2. Увімкнути ретрансляцію mDNS, встановивши enable-reflector=yesвсередині /etc/avahi/avahi-daemon.conf; запустіть і ввімкніть, avahi-daemon.serviceякщо цього ще немає.
  3. Встановіть парпуроване з AUR та створіть файл служби для нього, адаптувавши той, що відповідає відповіді Raspbian . Я не вважав за потрібне налаштовувати інтерфейс на розбірливий. Звичайно, цю послугу потрібно буде запустити та включити.
[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. Для підтримки DHCP для пристрою, підключеного до порту Ethernet, створіть послугу dhcrelay (з пакету DHCP). Пошук адреси 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

Такий підхід працював для мене на Raspberry Pi Model B + w / ArchLinuxArm, на якому встановлений USB-адаптер WiFi з чіпсетом RT5370. Оскільки Pi буде надавати WiFi принтеру лише з мережею Ethernet, я хотів би, щоб він був надійним для грубого поводження, тому наступним моїм кроком буде налаштування SD-карти як лише для читання .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.