Trên Arch Linux, tôi muốn có eth0 (được kết nối với bộ định tuyến cầu nối) chia sẻ kết nối nhận được từ wlan0, tôi đã đọc hướng dẫn nhưng tôi không hiểu biết như những người dùng khác và không hoàn toàn hiểu.
Trên Arch Linux, tôi muốn có eth0 (được kết nối với bộ định tuyến cầu nối) chia sẻ kết nối nhận được từ wlan0, tôi đã đọc hướng dẫn nhưng tôi không hiểu biết như những người dùng khác và không hoàn toàn hiểu.
Câu trả lời:
CẬP NHẬT
Không thể kết nối giữa không dây (máy khách hay chế độ trạm) và giao diện có dây theo luồng này trên linux-ath5k-devel .
Thay vào đó, người ta nên thiết lập NAT:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Sau đó, bạn phải gán địa chỉ IP cho chính mình:
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
Cài đặt máy chủ dhcp và thêm văn bản sau vào tệp cấu hình của nó (trong /etc/dhcpd.conf hoặc một cái gì đó tương tự)
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;
}
Sau đó bắt đầu /etc/init.d/dhcpd bắt đầu
Và đó là nó!
brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0
Đầu tiên bạn tạo một giao diện cầu nối Tôi chọn một tên tùy ý mybridge sau đó thêm không gian vào đó.
Bạn nên yêu cầu một địa chỉ IP mới (Điều này chỉ cần thiết nếu bạn muốn có được một IP hợp lệ cho chính thiết bị bắc cầu):
dhclient -d mybridge
Để kết nối giao diện wifi, bạn có thể sử dụng iw
công cụ để kích hoạt 4addr tương tự:
# iw dev <wifiInterface> set 4addr on
I E:
# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported
# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>
Bây giờ nó sẽ làm việc. Bạn có thể hiển thị các cầu bằng cách sử dụng:
# brctl show
4addr
Chế độ làm cho WiFi hoạt động đủ như Ethernet có dây mà cầu nối sẽ hoạt động. Không có nó, bắc cầu sẽ không hoạt động nếu không có NAT.
4addr
không yêu cầu cả hai mặt của một liên kết không dây hỗ trợ nó (giả sử bạn đang cố gắng thực hiện một bộ mở rộng wifi)
Phụ thuộc vào ý nghĩa của AP đối với bạn:
1) Nó chỉ có thể muốn xem các gói đến từ bạn, với địa chỉ lớp liên kết đã biết của bạn (và do đó không phải là các gói được bắc cầu) 2) Nó thực sự có thể thông minh hơn và biết địa chỉ IP nào sẽ thuộc về địa chỉ lớp liên kết nào (nguyên nhân nó biết DHCP và kiểm tra nó)
Nếu 1 + 2 đều đúng, bạn thực sự cần một cái gì đó như IP NAT, DHCP, ..
Nhưng nếu chỉ có 1) là trường hợp, bạn có thể giả mạo địa chỉ lớp liên kết và ánh xạ ngược lại sang bên phải theo hướng khác như được mô tả ở đây:
https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wantly_NIC
4addr như được mô tả trong các câu trả lời khác chắc chắn là cách tốt nhất khi được hỗ trợ bởi bộ điều hợp / trình điều khiển, nhưng không phải tất cả chúng đều được. NAT có thể hoạt động đối với một số thứ, nhưng việc giao tiếp đúng cách cả hai chiều trên lan sẽ trở thành vấn đề (ví dụ: kết nối máy in hoặc truy cập các thiết bị IoT khác ở phía bên kia của NAT). Bất cứ điều gì dựa vào quảng bá / phát đa hướng (ví dụ: tự động phát hiện, bonjour) sẽ thất bại thông qua NAT.
Giải pháp thay thế đang sử dụng Proxy ARP (parprouted) như được mô tả trong https://wiki.debian.org/BridgeNetworkConnectionsProxyArp . Tôi đã thiết lập điều này trên Raspberry Pi cho một máy in và nó hoạt động như một bùa mê (Tôi đã thêm một giấc ngủ 10 giây trong các post-up
lệnh để cho nó nhận địa chỉ IP trước, nó có thể phải làm với sự chậm chạp của tôi RPi ...)
Cầu wlan và 4addr:
Cầu nối wlan0 là một nỗi đau. Bạn thường không thể thêm nó vào giao diện cầu nối (brctl trả về "Thao tác không được phép") và sử dụng bộ lọc "cầu nối" VirtualBox dẫn đến một mớ hỗn độn lớn về xung đột ARP và DHCP. Nguyên nhân của điều này là do các khung 802.11 chỉ chứa ba địa chỉ theo mặc định: địa chỉ MAC của cả thiết bị không dây (máy tính xách tay và AP) và của người nhận cuối cùng (như trong Ethernet). Người ta luôn cho rằng chỉ có một người khởi tạo có thể.
802.11 có thể mang địa chỉ MAC thứ tư, của người khởi tạo và điều này được sử dụng trong chế độ WDS bởi các bộ lặp. Tính năng này cũng có thể được kích hoạt trên Linux, sử dụng iw và bật chế độ này sẽ cho phép wlan0 được sử dụng trong các giao diện cầu nối, cũng như với kết nối mạng cầu nối VirtualBox:
iw dev wlan0 set 4addr on
Tuy nhiên, với 4addr được bật, bạn có thể bị AP bỏ qua hoàn toàn: hiệp hội thành công nhưng tất cả các khung dữ liệu biến mất trong ether. Điều này có thể là vì lý do bảo mật (vì thật khó để giả mạo địa chỉ MAC nguồn. Vâng.) Trong bộ định tuyến của tôi (chạy OpenRG), cần phải bật chế độ "WDS" cho giao diện AP không dây, thêm thiết bị WDS bị hạn chế vào địa chỉ MAC của máy tính xách tay và thêm nó vào cầu nối LAN. Các gói 4addr hiện đang hoạt động.
Tuy nhiên, có một vấn đề khác - bộ định tuyến từ chối các gói ba địa chỉ từ máy tính xách tay, điều này có thể khá bất tiện (phải chuyển 4addr mỗi khi thay đổi mạng WLAN). Cách giải quyết là thêm, trên máy tính xách tay, giao diện không dây thứ hai được liên kết với cùng một thiết bị, nhưng có địa chỉ MAC khác. Đầu tiên hoàn tác cấu hình trước đó:
iw dev wlan0 set 4addr off
Sau đó, thêm giao diện thứ hai - tên được chọn tùy ý - với một địa chỉ MAC khác:
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
Ở đây phải khớp với địa chỉ thiết bị WDS được cấu hình trong bộ định tuyến; ngoài ra, nó có thể là bất kỳ địa chỉ MAC hợp lệ nào. MAC gốc của wlan0 sau đó vẫn được sử dụng cho "bình thường".
Có thể sử dụng cả wlan0 và wds.wlan0 cùng một lúc - mặc dù tôi chỉ thử nghiệm liên kết với cùng một AP hai lần, không phải với các AP khác nhau. Tôi đoán họ sẽ cần ít nhất là trên cùng một kênh.
Một số người đã hỏi tại sao sử dụng điều này khi VirtualBox có thể kết nối WiFi "tốt". Câu trả lời là VirtualBox không gửi địa chỉ MAC của máy ảo; thay vào đó, nó cũng thực hiện NAT ở lớp MAC. - 2014-08-22
Cầu wlan trực tiếp
Trong một số trường hợp nhất định, bạn cũng có thể sử dụng wlan_kabel. Nó sử dụng ổ cắm gói để kết nối trực tiếp wlan * với các thiết bị ethernet. Tuy nhiên, bạn chỉ có thể kết nối một MAC duy nhất tại một thời điểm với wlan_kabel. Nó không có nhược điểm là bị chặn bởi các điểm truy cập, bởi vì chỉ MAC gốc của thiết bị wlan được sử dụng. Trong trường hợp của bạn, điều này có nghĩa là, wlan0 chỉ có thể được sử dụng bởi một VM và thậm chí không phải bởi máy chủ. Bạn có thể lấy wlan_kabel tại đây . Điều này tương tự như giải pháp macvlans .
Cầu nối với ipvlan
IP Vlan không có giới hạn của một cây cầu, nó có thể được sử dụng để cầu một chi tiết mạng về cách sử dụng nó có thể được tìm thấy ở đây
Giả trang thay thế
Định tuyến Linux có thể được sử dụng thay thế với iptables-giả trang và ip_forward để đạt được một cầu nối nhưng như đã đề cập, điều này đòi hỏi phải kích hoạt ip_forward và sẽ khiến linux hoạt động như một bộ định tuyến, điều này cần được thiết lập cẩn thận vì nó có thể gây ra một số vấn đề bảo mật.
# 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
Giao diện br0 sau đó sẽ có quyền truy cập vào mạng wlan0
Quan trọng và liên quan
Ngoài ra, và rất quan trọng, bạn không nên sử dụng các lệnh lỗi thời, không dùng nữa như ifconfig, brctl , v.v. Bộ iproute2 chứa các lệnh cho tất cả điều này, bao gồm thiết lập giao diện ảo (thứ mà trước đây chúng ta phải sử dụng openvpn) và tạo cầu nối. Nếu bạn không biết cách thiết lập một cây cầu với ip, thì ở đây chúng tôi đi
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
Với bộ lệnh này, chúng ta tạo một giao diện ảo có tên là tap0, sau đó là một cây cầu có tên là br0, sau đó làm nô lệ eth0 và tap0 cho cây cầu, sau đó chúng ta gán một địa chỉ IP là 10.173.10.1, sau đó đưa tất cả lên. Ba trường hợp riêng biệt để đưa các giao diện lên (cho tap0, eth0 và br0) là bắt buộc.
Mẹo để thực hiện công việc này là sử dụng proxy.arp, cho phép máy tính của bạn (không phải không gian tên / vùng chứa VM / Linux của bạn) trả lời các truy vấn ARP thay cho chúng.
Nói cách khác, bằng cách sử dụng chuyển tiếp IPv4 giữa giao diện phần cứng và giao diện ảo của bạn, bạn nghĩ rằng bạn có thể kết nối VM / LXC / NNS với mạng LAN của mình như thể đó là giao diện vật lý, nhưng điều này không đúng: bạn hoàn toàn quên mất lưu lượng ARP cơ bản, đó là những gì thực sự cho phép LAN hoạt động. Vì vậy, vấn đề là: nếu tôi chuyển tiếp chính xác lưu lượng truy cập IPv4, làm cách nào tôi cũng có thể chuyển tiếp lưu lượng ARP, để VM / LXC / NNS của tôi hoạt động? Bí quyết là sử dụng proxy-arp.
Câu trả lời đầy đủ cho điều đó là trong Blog của Bohdi Zazen , với tiêu đề được tiết lộ: Thẻ không dây Bridge. Anh ta sử dụng gói lỗi thời, tiện ích uml, để tạo giao diện ảo bằng lệnh tuncl: đây là lệnh duy nhất anh ta sử dụng tiện ích uml, để bạn có thể bỏ qua việc tải xuống gói một cách an toàn và sử dụng lệnh I đã viết ở trên để tạo giao diện tap hoặc tun, tùy theo bạn thích, chỉ cần sửa đổi lệnh cho phù hợp. sau đó tạo một cặp veth cho LXC của bạn và bây giờ tạo cầu nối giữa tap0 và veth0. Cây cầu này, được gọi là br0, là thứ bạn phải ủy quyền, thay vì giao diện tap0 đơn giản được mô tả bởi Bohdi Zazen.
Nguồn: Askubfox.com , nullroute.eu.org , firejail.wordpress.com , superuser.com
Tôi thích cách tiếp cận Proxy Arp , nhưng câu hỏi ban đầu chỉ định Arch Linux. Đây là phiên bản Arch Linux của một triển khai Raspbian . Tôi đã rất cố gắng để điều chỉnh cách tiếp cận ban đầu từ Debian Wiki được đề cập ở đây với netctl bằng cách sử dụng ExecUpPost
và ExecDownPre
không thành công. Tất cả mọi thứ làm việc tại dòng lệnh, nhưng không phải trong hồ sơ.
Các bước:
IPForward=yes
. Tôi đã sử dụng WPA SUPicant để quản lý giao diện mạng không dây.enable-reflector=yes
trong /etc/avahi/avahi-daemon.conf
; bắt đầu và kích hoạt avahi-daemon.service
nếu nó chưa có[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
Cách tiếp cận này hiệu quả với tôi trên Raspberry Pi Model B + w / ArchLinuxArm trang bị bộ chuyển đổi USB WiFi với chipset RT5370. Vì Pi sẽ cung cấp WiFi cho máy in chỉ có ethernet, tôi muốn nó mạnh mẽ để xử lý thô, vì vậy bước tiếp theo của tôi sẽ là định cấu hình thẻ SD là chỉ đọc .