nhiều giao diện vật lý với IP trên cùng một mạng con


13

Tôi có một hộp linux với 9 NIC trên đó và tôi muốn tám trong số chúng có địa chỉ duy nhất trên cùng một mạng con, ví dụ:

ifconfig eth1 192.168.123.1 netmask 255.255.0.0
ifconfig eth2 192.168.123.2 netmask 255.255.0.0
ifconfig eth3 192.168.123.3 netmask 255.255.0.0
...
ifconfig eth8 192.168.123.8 netmask 255.255.0.0

Hành vi ARP mặc định cực kỳ phản tác dụng trong trường hợp này, vì nó dẫn đến tất cả lưu lượng truy cập cho tất cả các IP đi qua eth1, điều này hoàn toàn trái ngược với những gì tôi muốn.

Vì vậy, tôi đã lục lọi và cuối cùng thực hiện một số thay đổi đối với sysctl như thế này:

net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

Điều đó đã ngăn không cho eth1mạo danh tất cả những người khác, nhưng tôi vẫn không thể ping bất cứ thứ gì ngoài eth1địa chỉ của thành công. (ví dụ: từ máy tính thứ hai trên cùng một công tắc, chỉ 192.168.123.1phản hồi ping)

Tôi đoán rằng tôi cần phải làm một cái gì đó với arptables hoặc iproute hoặc SOMETHING, nhưng tôi bị lạc trên biển trong lĩnh vực này.

Điểm thưởng: Giải pháp phải tương thích với Linux 2.6.27.27. (Cụ thể hơn, Slax 6.1.2)


Bạn có thể gửi bảng định tuyến?
ponsfemony

2
Mục đích của bạn trong việc tạo cấu hình này là gì? Bạn đang cố gắng để thực hiện?
David Schwartz

cách điên rồ này nằm.
Sirex

nếu bạn muốn liên kết các giao diện này, bạn sẽ phải thực sự liên kết chúng.
resmon6

1
@DavidSchwartz Không, máy không được coi là hoạt động như một công tắc (hoặc bộ định tuyến). Hãy nghĩ về nó nhiều hơn khi chạy 8 máy ảo với một NIC vật lý chuyên dụng cho mỗi VM ( Lưu ý: Tôi không chạy VM, đây chỉ là một sự tương tự ). Từ quan điểm của một hộp khác trên cùng một mạng, PC đơn lẻ của tôi hoàn toàn không thể phân biệt được với tám PC rời rạc.
bực

Câu trả lời:


17

Bạn cần một mô hình hệ thống kết thúc mạnh mẽ . Linux về cơ bản được xây dựng xung quanh một mô hình hệ thống gửi yếu, vì vậy đây thực sự không phải là một lựa chọn hệ điều hành tốt cho ứng dụng này.

Bạn sẽ phải giả mạo mọi phần của hành vi bạn cần, từ ARP đến định tuyến chính sách đến lựa chọn địa chỉ nguồn. Bạn cũng sẽ cần các bộ lọc để ngăn các gói tin được chấp nhận nếu chúng đến trên giao diện sai.

Các bước chắc chắn cần thiết là:

  1. Cấu hình arp_filter = 1 và arp_ignore = 2 trên tất cả các giao diện.

  2. Thêm mỗi giao diện, định tuyến dựa trên nguồn cho lưu lượng đi. (Giao diện đích phải được chọn dựa trên địa chỉ nguồn.)

  3. Thêm bộ lọc xâm nhập trên mỗi giao diện để âm thầm thả các gói nhận được trên giao diện sai. (Các gói có địa chỉ đích được gán cho giao diện khác.)

Thật không may, không có sự đồng thuận về việc ba bước này là tất cả những gì cần thiết. Mô hình hệ thống đầu cuối yếu được tích hợp trong toàn bộ ngăn xếp TCP / IP của Linux và không rõ điều gì có thể xảy ra với các vấn đề tinh vi như phát đa hướng.

Chẳng rõ bạn sẽ chọn giao diện đầu ra cho các chương trình phát sóng như thế nào. Nó có nên đi ra ngoài tất cả chúng? Có lẽ. Hành vi đúng là gì nếu ngăn xếp được phát sóng ra ngoài với địa chỉ nguồn không được gán cho một trong các giao diện?

Một lần nữa, bạn đã chọn sai công cụ cho công việc.


6

Bạn có nhiều khả năng muốn tạo một cây cầu với các giao diện 8/9 và sau đó gán địa chỉ IP cho cây cầu đó (gói cầu-utils, lệnh 'brctl add').

Bằng cách này, cây cầu sẽ hoạt động như một công tắc và có thể có địa chỉ IP vào mạng con của bạn.


AFAIK, đây thực sự sẽ là câu trả lời chính xác cho Linux. Linux giải quyết nhiều vấn đề được đề cập trong câu trả lời của David bằng cách sử dụng các thiết bị cầu nối (còn gọi là tránh các vấn đề L3 bằng cách xây dựng mạng logic L2 tốt hơn).
Dave

4

Tôi khuyên bạn nên liên kết các giao diện vật lý sau đó định cấu hình tất cả các địa chỉ trên giao diện ngoại quan duy nhất.

Bạn cũng sẽ cần hỗ trợ về việc chuyển đổi.

Đây là một hướng dẫn nhỏ mà bạn có thể sử dụng để bắt đầu.


4

Có vẻ như bạn muốn có một môi trường thử nghiệm tương đương với 9 máy riêng biệt và tin rằng 9 giao diện trên một máy có thể mô phỏng điều đó. Trong Linux, đơn giản là không thể thực hiện điều này thông qua một ngăn xếp vì những lý do David Schwartz đã mô tả. BTDT và có sẹo. Nó đã đủ tệ với 2 giao diện.

Một giải pháp tốt hơn có thể là chạy 8 hoặc 9 máy ảo rời rạc trong một máy chủ của bạn và kết nối 8 hoặc 9 giao diện với các máy ảo này.


Đọc tài nguyên: Lập trình mạng Unix: API mạng Sockets, của Stevens, Fenner và Rudoff. Cũng xem RFC1122 và RFC4907.
Skaperen

0

Vâng, có thể theo đề nghị của David Schwartz:

echo -ne 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo -ne 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo -ne 0 > /proc/sys/net/ipv4/conf/eth3/rp_filter

// Đối với chức năng phù hợp, tức là ARP trả lời từ eth1 để được tạo khi cả eth0 và eth1 nằm trong cùng một mạng con

echo -ne 0 > /proc/sys/net/ipv4/conf/all/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo -ne 0 > /proc/sys/net/ipv4/conf/eth0/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo -ne 0 > /proc/sys/net/ipv4/conf/eth1/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/eth1/arp_ignore

//Create a table called "new_rt_table" and create a routing rule that says any packet with a mark equal to '1' gets routed according to the "new_rt_table"(can name it whatever you want) table. The file /etc/iproute2/rt_tables is the only source of table names on the system. Internally, routing tables have integer identifiers.

echo 1 new_rt_table >> /etc/iproute2/rt_tables
ip rule add from all fwmark 1 table new_rt_table

// thiết lập bảng "new_rt_table" để định tuyến các gói thông qua eth1

ip route add default dev eth1 table new_rt_table
ip route show table new_rt_table

// đánh dấu các gói để 'lộ trình ip' có thể định tuyến thông qua eth1

iptables -F -t mangle
iptables -t mangle -I OUTPUT -s <ip addr of eth1> -o eth0 -j MARK --set-mark 1

// kích hoạt hỗ trợ cho nhiều bảng định tuyến trong cấu hình kernel.

Cấu hình hạt nhân

→ Hỗ trợ mạng → Tùy chọn kết nối mạng

[*] IP: bộ định tuyến tiên tiến

[*] IP: định tuyến chính sách

CONFIG_IP_ADVANCED_ROUTER

CONFIG_IP_MULTIPLE_TABLES

// các bước trên chuyển hướng các gói có nghĩa là đầu ra từ eth0 để thoát khỏi eth1.

Vui lòng đề nghị bất kỳ phương pháp khác nếu bất cứ ai làm cho nó hoạt động.

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.