Tại sao ARP chỉ phản hồi khi bộ điều hợp mạng ở chế độ lăng nhăng?


3

Trong mạng gia đình của tôi (10.0.0.0/24) tôi muốn triển khai một máy in mạng mà không cần đặt cáp từ bộ chuyển đổi sang nó. Vì vậy, tôi đã sử dụng Raspberry Pi, kết nối qua Wifi với mạng không dây của tôi và kết nối cổng Ethernet với máy in. Mục tiêu là có một cái gì đó giống như một cây cầu Wifi-Ethernet ở đây ...

RPi Ethernet IP (eth0): 10.0.0.32
RPi Wifi IP (wlan0): 10.0.0.31
Printer IP: 10.0.0.30

Sau khi chơi xung quanh với tcpdump tôi phát hiện ra rằng RPi đang trả lời các Yêu cầu ARP từ Bộ định tuyến (10.0.0.1), chỉ khi tôi có

net.ipv4.ip_forward = 1
net.ipv4.conf.all.proxy_arp = 1

kích hoạt. Những gì tôi có thể hiểu được đọc các trang web. Tôi đã thử nghiệm điều này với các lệnh đơn giản từ bộ định tuyến đến IP của máy in.

Bây giờ, khi tôi xóa ARP Cache trên bộ định tuyến mà không mở tcpdump trên RPi, bằng cách nào đó, ARP Responses đã ngừng hoạt động. Vì vậy, tôi đã tự hỏi tại sao nó bắt đầu hoạt động trở lại, ngay khi tôi bắt đầu tcpdump trên Pi. Hóa ra, tcpdump đang đưa Giao diện WiFi của Raspberry Pi sang chế độ lăng nhăng. Để hoạt động chính xác, tôi đặt Giao diện WiFi của Pi ở chế độ lăng nhăng vĩnh viễn

 ip link set wlan0 promisc on

và mọi thứ hiện đang hoạt động tốt, nhưng vì tôi có Cảm giác rằng giải pháp này "có mùi" nên tôi muốn biết những gì đang diễn ra ở đây và tại sao proxy_arp không đủ?

Ngoài ra, vì tôi có hai giao diện mạng ở đây, hoạt động trên cùng một mạng con, tôi đã đảm bảo với một số chính sách tuyến đường, chỉ lưu lượng truy cập đến máy in được định tuyến qua eth0.

localhost ~ # ip rule show
0:      from all lookup local
32764:  not from all to 10.0.0.30 lookup main
32765:  from all to 10.0.0.30 lookup print
32766:  from all lookup main
32767:  from all lookup default


localhost ~ # ip route show table print
10.0.0.30 dev eth0  scope link

Tại sao bạn không kết nối hai giao diện mạng? Bạn đã gắn thẻ từ khóa đó trong câu hỏi của bạn, nhưng bạn không thực sự làm điều đó. Loại bỏ tất cả các quy tắc tuyến đường và cầu nối hai giao diện.
Appleoddity

Xin lỗi tôi đã không đề cập, khi tôi thêm Bộ điều hợp wifi vào một cây cầu, HĐH sẽ phản hồi với Hoạt động không được hỗ trợ (liên kết ip đặt dev wlan0 master br0). Tôi sẽ điều tra về điều đó, vì cầu nối "thực sự" sẽ là con đường để đi ...
Christian Ehrig

Chỉ để tham khảo: Tôi chưa thấy câu hỏi của bạn vì vậy tôi đã thực hiện gần giống như vậy Chế độ lăng nhăng có cần thiết cho proxy arp không? .
Ingo

Câu trả lời:


2

Về cơ bản có hai cách để làm những gì bạn đang cố gắng: Định tuyến và bắc cầu.

Không ai trong số họ sử dụng proxy_arp. proxy_arplà một hack bạn có thể sử dụng nếu các phần trong mạng của bạn nghĩ rằng bạn đang định tuyến và các phần khác nghĩ rằng bạn đang bắc cầu. Đây là giải pháp cuối cùng bạn chỉ nên sử dụng khi bạn đã loại trừ tất cả các tùy chọn khác.

Lời khuyên của tôi là bạn cần hiểu đầy đủ cả giải pháp định tuyến và bắc cầu và hiểu lý do tại sao cả hai sẽ không làm việc cho bạn trước khi bạn dùng đến proxy_arp.

Trường hợp sử dụng của bạn không giống như một trong những trường hợp proxy_arpcần thiết.

Giải quyết vấn đề với bắc cầu

WiFi sử dụng địa chỉ MAC ở hai lớp của ngăn xếp. Bạn sẽ có một cặp địa chỉ MAC cho các điểm cuối như trong Ethernet có dây. Và bạn sẽ có một cặp địa chỉ MAC cho biết điểm cuối của liên kết không dây.

Thật không may, tiêu chuẩn WiFi ban đầu giả định một cặp cụ thể của bốn địa chỉ MAC đó sẽ luôn giống hệt nhau và giả định đó không đúng khi kết nối. Vì vậy, một tiêu chuẩn mới hơn được gọi là WDS đã được giới thiệu để khắc phục điều đó.

Vì vậy, để định cấu hình bắc cầu, bạn cần đảm bảo phần cứng ở cả hai đầu kết nối WiFi của bạn hỗ trợ WDS và kích hoạt nó. Tiếp theo, bạn cần hoàn nguyên hai sysctlthay đổi mà bạn đã thực hiện vì những thay đổi đó không được sử dụng để bắc cầu.

Cuối cùng, bạn cần cấu hình một cây cầu trên Pi kết hợp giao diện có dây và không dây thành một cây cầu. Nếu bạn muốn Pi nói IP cũng như bạn định cấu hình trên giao diện cầu nối chứ không phải các giao diện vật lý cơ bản.

Đây là một loạt những thứ cần cấu hình và có nguy cơ WDS không được phần cứng hỗ trợ.

Giải quyết vấn đề với định tuyến

Nếu bạn muốn thực hiện định tuyến, bạn vẫn cần hoàn nguyên proxy_arpcài đặt. Các net.ipv4.ip_forward = 1thiết lập là tuy nhiên chính xác cho một thiết lập định tuyến.

Trên Pi, bạn cần cấu hình hai giao diện mạng với các tiền tố khác nhau. Không dây mà bạn đã cấu hình với 10.0.0.0/24bạn có thể có thể rời khỏi, vì phần đó đã hoạt động.

Giao diện có dây tuy nhiên bạn cần cấu hình với một tiền tố khác. Một sự lựa chọn có thể là 10.0.1.0/24. Và bạn có thể gán 10.0.1.1cho giao diện có dây trên Pi.

Máy in có thể được cấu hình bằng một địa chỉ IP tĩnh như 10.0.1.2hoặc bạn có thể để nó được cấu hình động mà yêu cầu bạn phải cài đặt máy chủ DHCP trên Pi để xử lý các địa chỉ trong 10.0.1.1tiền tố.

Cuối cùng, bạn cần nói với bộ định tuyến hiện tại của mình về mạng mới này bằng cách thêm một mục nhập bảng định tuyến. Trong cấu hình trên bộ định tuyến hiện tại của bạn, thêm một mục nhập bảng định tuyến cho tiền tố 10.0.1.0/24(được viết thay thế là 10.0.1.0/255.255.255.0) với địa chỉ cổng là 10.0.0.31. Bạn cần đảm bảo rằng địa chỉ 10.0.0.31nào đó được giữ tĩnh, nếu không, mục nhập bảng định tuyến của bạn sẽ trở nên không chính xác.


Tôi đã có giải pháp Định tuyến chính xác tại chỗ, nhưng mục tiêu của tôi là ở cùng một dải địa chỉ với tất cả các thiết bị. Tôi sẽ kiểm tra lại giải pháp bắc cầu nhưng khi tôi thử thêm Bộ điều hợp wifi vào cầu nối ... "liên kết ip được đặt dev wlan0 master br0" ... nó phản hồi với Hoạt động không được hỗ trợ. tôi sẽ điều tra về điều đó
Christian Ehrig

Tôi đoán giải pháp là một cái gì đó giống như serverfault.com/a/554663/345934
Christian Ehrig

@ChristianEhrig Âm thanh như thế có thể hoạt động. Cá nhân tôi luôn sử dụng phương pháp định tuyến cho các thiết lập như vậy vì tôi thấy rằng để dễ cấu hình hơn là bắc cầu qua mạng không dây.
kasperd

@ChristianEhrig Tất cả Raspberry Pis không hỗ trợ WDS . Các thiết bị hỗ trợ này có lệnh được hỗ trợ set_wds_peer. Bạn sẽ không tìm thấy nó sudo iw phy | grep set_wds_peertrên RasPi.
Ingo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.