Di Arch Linux, saya ingin memiliki eth0 (terhubung ke router bridged) berbagi koneksi yang diterima dari wlan0, saya sudah membaca tutorial tapi saya tidak mengerti perintah seperti pengguna lain dan tidak sepenuhnya mengerti.
Di Arch Linux, saya ingin memiliki eth0 (terhubung ke router bridged) berbagi koneksi yang diterima dari wlan0, saya sudah membaca tutorial tapi saya tidak mengerti perintah seperti pengguna lain dan tidak sepenuhnya mengerti.
Jawaban:
MEMPERBARUI
Tidak mungkin untuk menjembatani antara nirkabel (klien alias stasiun mode) dan antarmuka kabel sesuai dengan utas ini di linux-ath5k-devel .
Orang harus mengatur NAT sebagai gantinya:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Maka Anda harus menetapkan alamat IP untuk diri sendiri:
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
Instal server dhcp dan tambahkan teks berikut ke file config-nya (di /etc/dhcpd.conf atau yang serupa)
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;
}
Kemudian mulai /etc/init.d/dhcpd mulai
Dan itu dia!
brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0
Pertama-tama Anda membuat antarmuka jembatan. Saya memilih nama mybridge yang sewenang-wenang, lalu menambahkan antarmuka ke dalamnya.
Anda harus meminta alamat ip baru (Ini diperlukan hanya jika Anda ingin mendapatkan IP yang valid untuk perangkat bridging itu sendiri):
dhclient -d mybridge
Untuk menjembatani antarmuka wifi Anda dapat menggunakan iw
alat untuk mengaktifkan 4addr juga:
# iw dev <wifiInterface> set 4addr on
yaitu:
# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported
# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>
Sekarang ini seharusnya bekerja. Anda dapat menunjukkan jembatan menggunakan:
# brctl show
4addr
Mode ini membuat WiFi berperilaku cukup seperti Ethernet berkabel sehingga bridging akan berfungsi. Tanpa itu, menjembatani tidak akan bekerja tanpa NAT.
4addr
memang mengharuskan kedua sisi tautan nirkabel mendukungnya (dengan anggapan Anda mencoba menerapkan wifi extender)
Tergantung pada seberapa berarti AP bagi Anda:
1) Mungkin hanya ingin melihat paket yang berasal dari Anda, dengan alamat lapisan tautan Anda yang diketahui (dan karenanya bukan dari paket yang dijembatani) 2) Itu mungkin sebenarnya lebih pintar, dan tahu alamat IP mana yang seharusnya menjadi milik alamat lapisan tautan mana (sebab ia tahu DHCP dan memeriksanya)
Jika 1 + 2 keduanya benar, Anda memang perlu sesuatu seperti IP NAT, DHCP, ..
Tetapi jika hanya 1) yang menjadi masalah, Anda bisa memalsukan alamat layer-link, dan membalikkan peta ke yang benar di arah lain seperti yang dijelaskan di sini:
https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC
4add seperti yang dijelaskan dalam jawaban lain tentu saja merupakan cara terbaik ketika didukung oleh adaptor / driver, tetapi tidak semuanya melakukannya. NAT mungkin bekerja untuk beberapa hal, tetapi mendapatkan komunikasi yang tepat kedua cara pada lan akan menjadi masalah (mis. Menghubungkan printer atau mengakses perangkat IoT lain di sisi lain NAT). Apa pun yang mengandalkan siaran / multicast (mis. Penemuan otomatis, bonjour) akan gagal melalui NAT.
Alternatifnya menggunakan Proxy ARP (parprouted) seperti yang dijelaskan dalam https://wiki.debian.org/BridgeNetworkConnectionsProxyArp . Saya telah mengatur ini pada Raspberry Pi untuk printer dan itu bekerja seperti pesona (saya telah menambahkan 10 detik tidur dalam post-up
perintah untuk membiarkannya mendapatkan alamat IP terlebih dahulu, mungkin ada hubungannya dengan lambatnya tua saya RPi ...)
Bridge wlan dan 4addr:
Menjembatani wlan0 adalah rasa sakit. Anda biasanya tidak dapat menambahkannya ke antarmuka jembatan (brctl mengembalikan "Operasi tidak diizinkan"), dan menggunakan filter VirtualBox "dijembatani" menghasilkan kekacauan besar konflik ARP dan DHCP. Penyebabnya adalah bahwa frame 802.11 hanya berisi tiga alamat secara default: alamat MAC dari kedua perangkat nirkabel (laptop dan AP) dan penerima akhir (seperti dalam Ethernet). Selalu diasumsikan bahwa hanya ada satu kemungkinan penggagas.
802.11 dapat membawa yang keempat, alamat MAC pencetusnya, dan ini digunakan dalam mode WDS oleh repeater. Fitur ini juga dapat diaktifkan di Linux, menggunakan iw, dan mengaktifkan mode ini akan memungkinkan wlan0 untuk digunakan dalam antarmuka jembatan, serta dengan jaringan penghubung VirtualBox:
iw dev wlan0 set 4addr on
Namun, dengan 4addr diaktifkan, Anda kemungkinan besar akan sepenuhnya diabaikan oleh AP: asosiasi berhasil tetapi semua frame data menghilang ke eter. Ini bisa karena alasan keamanan (karena sangat sulit untuk menipu alamat MAC sumber. Ya.) Di router saya (menjalankan OpenRG), perlu untuk mengaktifkan mode "WDS" untuk antarmuka AP nirkabel, tambahkan perangkat WDS yang terbatas pada perangkat saya. alamat MAC laptop, dan tambahkan ke jembatan LAN. Paket 4addr sekarang berfungsi.
Namun, ada masalah lain dengan ini - router sekarang menolak paket tiga-alamat dari laptop, yang mungkin agak merepotkan (harus beralih 4addr setiap kali jaringan WLAN diubah). Solusinya adalah menambahkan, pada laptop, antarmuka nirkabel kedua yang terhubung ke perangkat yang sama, tetapi dengan alamat MAC yang berbeda. Pertama-tama batalkan konfigurasi sebelumnya:
iw dev wlan0 set 4addr off
Kemudian, tambahkan antarmuka kedua - nama itu dipilih secara sewenang-wenang - dengan alamat MAC yang berbeda:
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
Di sini harus cocok dengan alamat perangkat WDS yang dikonfigurasi di router; selain itu, itu bisa berupa alamat MAC yang valid. MAC asli dari wlan0 kemudian tetap untuk penggunaan "normal".
Dimungkinkan untuk menggunakan wlan0 dan wds.wlan0 pada saat yang sama - walaupun saya baru saja menguji asosiasi dengan AP yang sama dua kali, bukan pada AP yang berbeda. Saya kira mereka harus setidaknya berada di saluran yang sama.
Beberapa orang bertanya mengapa menggunakan ini ketika VirtualBox dapat menjembatani WiFi "baik-baik saja". Jawabannya adalah bahwa VirtualBox tidak mengirim alamat MAC mesin virtual; melainkan, ia melakukan NAT pada lapisan MAC juga. - 2014-08-22
Jembatan wlan langsung
Dalam keadaan tertentu, Anda juga bisa menggunakan wlan_kabel. Menggunakan soket paket untuk langsung menjembatani wlan * -perangkat dengan perangkat ethernet. Namun, Anda hanya dapat menjembatani satu MAC pada satu waktu dengan wlan_kabel. Itu tidak memiliki kelemahan dilarang oleh titik akses, karena hanya MAC asli dari perangkat wlan yang digunakan. Dalam kasus Anda ini berarti, bahwa wlan0 hanya dapat digunakan oleh satu VM dan bahkan oleh tuan rumah. Anda bisa mendapatkan wlan_kabel di sini . Ini mirip dengan solusi macvlan .
Menjembatani dengan ipvlan
IP Vlan tidak memiliki batasan jembatan yang dapat digunakan untuk menjembatani rincian jaringan tentang cara menggunakannya dapat ditemukan di sini
Masquerade alternatif
Perutean Linux dapat digunakan sebagai gantinya dengan iptables-masquerade dan ip_forward untuk mencapai jembatan, tetapi seperti yang disebutkan ini perlu mengaktifkan ip_forward dan akan membuat linux bertindak seperti router, ini perlu diatur dengan hati-hati karena dapat menimbulkan masalah keamanan.
# 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
Antarmuka br0 kemudian akan memiliki akses ke jaringan wlan0
Penting dan terkait
Juga, dan sangat penting, Anda tidak boleh menggunakan perintah usang, usang seperti ifconfig, brctl , dan sebagainya. Iproute2 suite berisi perintah untuk semua ini, termasuk mengatur antarmuka virtual (sesuatu yang dulu harus kita gunakan openvpn) dan membuat jembatan. Jika Anda tidak tahu cara mengatur jembatan dengan ip, ini dia
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
Dengan serangkaian perintah ini, kami membuat antarmuka virtual yang disebut tap0, lalu jembatan yang disebut br0, lalu memperbudak eth0 dan tap0 ke jembatan, yang kami tetapkan alamat IP 10.173.10.1, lalu bawa semuanya. Tiga contoh terpisah untuk menaikkan antarmuka (untuk tap0, eth0, dan br0) diperlukan.
Trik untuk membuat pekerjaan ini adalah dengan menggunakan proxy.arp, yang memungkinkan pc Anda (bukan VM / Linux container / namespace jaringan Anda) untuk menjawab pertanyaan ARP sebagai gantinya.
Dengan kata lain, dengan menggunakan penerusan IPv4 antara antarmuka perangkat keras dan antarmuka virtual Anda, Anda pikir Anda dapat menghubungkan VM / LXC / NNS Anda ke LAN seolah-olah itu adalah antarmuka fisik, tetapi ini tidak benar: Anda lupa sepenuhnya lalu lintas ARP mendasar, yang sebenarnya memungkinkan LAN beroperasi. Jadi, masalahnya adalah: jika saya meneruskan lalu lintas IPv4 dengan benar, bagaimana saya juga bisa meneruskan lalu lintas ARP, sehingga VM / LXC / NNS saya berfungsi? Caranya adalah dengan menggunakan proxy-arp.
Jawaban lengkapnya ada di Blog Bohdi Zazen , dengan judul yang terbuka: Kartu nirkabel jembatan. Ia menggunakan paket usang, uml-utilities, untuk membuat antarmuka virtual dengan menggunakan perintah tunctl: ini adalah satu-satunya perintah yang ia gunakan uml-utilities, sehingga Anda dapat dengan aman mengabaikan mengunduh paket, dan menggunakan perintah I tulis di atas untuk membuat antarmuka tap atau tun, mana pun yang Anda suka, cukup modifikasi perintahnya. lalu buat pasangan veth untuk LXC Anda, dan sekarang buat jembatan antara tap0 dan veth0. Jembatan ini, yang disebut br0, adalah yang harus Anda gunakan untuk proxy-arp, bukan antarmuka tap0 sederhana yang dijelaskan oleh Bohdi Zazen.
Sumber: askubuntu.com , nullroute.eu.org , firejail.wordpress.com , superuser.com
Saya menyukai pendekatan Proxy Arp , tetapi pertanyaan aslinya menentukan Arch Linux. Berikut ini adalah versi Arch Linux dari implementasi Raspbian . Saya berusaha sangat keras untuk mengadaptasi pendekatan asli dari Debian Wiki yang disebutkan di sini untuk menggunakan netctlExecUpPost
dan ExecDownPre
tanpa hasil. Semuanya bekerja di baris perintah, tetapi tidak di dalam profil.
Langkah langkah:
IPForward=yes
. Saya menggunakan WPA Supplicant untuk mengelola antarmuka jaringan nirkabel.enable-reflector=yes
dalam /etc/avahi/avahi-daemon.conf
; mulai dan aktifkan avahi-daemon.service
jika belum.[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
Pendekatan ini berhasil bagi saya pada Raspberry Pi Model B + w / ArchLinuxArm yang memakai adaptor USB WiFi dengan chipset RT5370. Karena Pi akan menyediakan WiFi ke printer hanya dengan ethernet, saya ingin itu kuat untuk penanganan yang kasar, jadi langkah saya selanjutnya adalah mengkonfigurasi kartu SD sebagai hanya baca .