Tại sao lưu lượng truy cập mạng Linux chỉ đi qua eth0?


20

Tôi có hai NIC ở phía máy chủ, eth0? 192.168.8.140 và eth1? 192.168.8.142. Máy khách gửi dữ liệu tới 192.168.8.142 và tôi hy vọng iftopsẽ hiển thị lưu lượng truy cập cho eth1, nhưng không được. Tất cả các mạng đều đi qua eth0, vậy làm cách nào tôi có thể kiểm tra hai NIC?

Tại sao tất cả lưu lượng truy cập đi qua eth0 thay vì eth1? Tôi dự kiến ​​tôi có thể nhận được 1 Gbit / s trên mỗi giao diện. Có gì sai với thiết lập hoặc cấu hình của tôi?

Máy chủ

ifconfig

eth0    Link encap:Ethernet  HWaddr 00:00:00:19:26:B0
        inet addr:192.168.8.140  Bcast:0.0.0.0  Mask:255.255.252.0
        inet6 addr: 0000::0000:0000:fe19:26b0/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:45287446 errors:0 dropped:123343 overruns:2989 frame:0
        TX packets:3907747 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:66881007720 (62.2 GiB)  TX bytes:261053436 (248.9 MiB)
        Memory:f7e00000-f7efffff

eth1    Link encap:Ethernet  HWaddr 00:00:00:19:26:B1
        inet addr:192.168.8.142  Bcast:0.0.0.0  Mask:255.255.255.255
        inet6 addr: 0000::0000:0000:fe19:26b1/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:19358 errors:0 dropped:511 overruns:0 frame:0
        TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:1772275 (1.6 MiB)  TX bytes:1068 (1.0 KiB)
        Memory:f7c00000-f7cfffff

Phía máy chủ

# Listen for incomming from 192.168.8.142
nc -v -v -n -k -l 192.168.8.142 8000 | pv > /dev/null
Listening on [192.168.8.142] (family 0, port 8000)
Connection from 192.168.8.135 58785 received!

Khách hàng

# Send to 192.168.8.142
time yes | pv |nc -s 192.168.8.135 -4 -v -v -n 192.168.8.142 8000 >/dev/null
Connection to 192.168.8.142 8000 port [tcp/*] succeeded!

Phía máy chủ

$ iftop -i eth0
interface: eth0
IP address is: 192.168.8.140

TX:             cumm:  6.34MB   peak: 2.31Mb   rates: 2.15Mb  2.18Mb  2.11Mb
RX:                    2.55GB          955Mb           874Mb   892Mb   872Mb
TOTAL:                 2.56GB          958Mb           877Mb   895Mb   874Mb

$ iftop -i eth1
interface: eth1
IP address is: 192.168.8.142

TX:             cumm:      0B   peak:     0b   rates:     0b      0b      0b
RX:                    4.51KB         3.49Kb          3.49Kb  2.93Kb  2.25Kb
TOTAL:                 4.51KB         3.49Kb          3.49Kb  2.93Kb  2.25Kb

$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:00:00:19:26:b0 brd ff:ff:ff:ff:ff:ff
$ ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:00:00:19:26:b1 brd ff:ff:ff:ff:ff:ff

1
Nghe có vẻ như những gì bạn thực sự tìm kiếm là liên kết giao diện: wiki.linuxfoundation.org/networking/boinating
Flexo

@flexo hoàn toàn đúng - tùy thuộc vào mục tiêu cuối cùng của bạn, liên kết hai giao diện mạng với nhau có thể cung cấp cho bạn băng thông tổng thể cao hơn, nhưng các tùy chọn liên kết khác nhau. Tốt nhất bạn có thể nhận được là 2 luồng ~ 1 Gbit chứ không phải 1 luồng 2 Gbit. Thêm vào đó bạn yêu cầu các dịch vụ của một chuyển đổi ethernet được quản lý. Tương tự như vậy, liên kết 4 có thể cho luồng 4x 1 Gbit cùng một lúc.
Criggie

Câu trả lời:


32

Có hai mô hình thiết kế khả dĩ cho ngăn xếp mạng TCP / IP: mô hình máy chủ mạnh và mô hình máy chủ yếu. Bạn đang mong đợi hành vi phù hợp với mô hình máy chủ mạnh mẽ. Linux được thiết kế để sử dụng mô hình máy chủ yếu. Nhìn chung, mô hình máy chủ yếu phổ biến hơn vì nó làm giảm độ phức tạp của mã định tuyến và do đó có thể cung cấp hiệu suất tốt hơn. Mặt khác, hai mô hình máy chủ chỉ là các nguyên tắc thiết kế khác nhau: không phải là tốt hơn so với mô hình kia.

Về cơ bản, mô hình máy chủ yếu có nghĩa là lưu lượng đi sẽ được gửi ra giao diện đầu tiên được liệt kê trong bảng định tuyến khớp với địa chỉ IP của đích (hoặc cổng được chọn, nếu đích không thể truy cập trực tiếp), mà không liên quan đến IP nguồn địa chỉ .

Về cơ bản, đây là lý do tại sao thường không thể sử dụng hai giao diện vật lý riêng biệt nếu bạn cần hai địa chỉ IP trên cùng một phân đoạn mạng. Thay vào đó, chỉ định hai địa chỉ IP cho một giao diện (bí danh IP: ví dụ: eth1 = 192.168.8.142 và eth1: 0 = 192.168.8.140). Nếu bạn cần nhiều băng thông hơn một giao diện có thể cung cấp, liên kết (hoặc nhóm, nếu có thể) hai hoặc nhiều giao diện với nhau, sau đó chạy cả hai IP trên liên kết / nhóm.

Bằng cách điều chỉnh một số cài đặt sysctl và sử dụng chức năng "định tuyến nâng cao" để thiết lập các bảng định tuyến độc lập cho mỗi NIC, có thể làm cho Linux hoạt động giống như một hệ thống mô hình máy chủ mạnh. Nhưng đó là một cấu hình rất đặc biệt và tôi khuyên bạn nên suy nghĩ kỹ trước khi thực hiện nó.

Xem câu trả lời tại Định tuyến nguồn Linux, Mô hình hệ thống kết thúc mạnh / Mô hình máy chủ mạnh? nếu bạn thực sự cần nó


Chế độ mặc định cũng là một bất ngờ xấu đang chờ đợi nếu cố gắng định hình lưu lượng truy cập với iptables :)
rackandboneman

vâng, tôi đã rất vui khi thực hiện mô hình máy chủ mạnh mẽ trong quá khứ. Nó được yêu cầu cho dự án đó, nhưng tôi sẽ không phải trải qua cơn đau đầu đó cho một máy cá nhân.
Baldrickk

11

Một điểm bổ sung cần xem xét là giao diện eth1 được cấu hình với mặt nạ mạng con là 255.255.255.255.

Điều này có nghĩa là giao diện eth1 được cấu hình để mong đợi không có thiết bị (máy chủ) nào khác trên giao diện mạng của nó. Điều này có nghĩa là nó sẽ không thể giao tiếp với khách hàng 192.168.8.142 của bạn.


2

Sau rất nhiều lần tìm kiếm, tôi đã tìm thấy Tại sao netcat không sử dụng đúng giao diện được liên kết với IP? , và đây là cùng một vấn đề. Như @telcoM đã nói, lưu lượng đi sẽ được gửi đến giao diện đầu tiên và đó là vấn đề, vì vậy, cách dễ nhất để giải quyết vấn đề này là:

ip route add default via 192.168.8.142 dev eth1 table 142
ip rule add from 192.168.8.142 table 142

Tuyến này sẽ thực hiện ip route get 192.168.8.135 from 192.168.8.142trả lại eth1 thay vì eth0. Sau đó, mọi thứ hoạt động như mong đợi.


3
Nếu bạn bỏ qua các cài đặt sysctl ARP được đề cập trong câu hỏi tôi đã đề cập và đang xử lý các bộ chuyển mạch và bộ định tuyến cấp doanh nghiệp, quản trị viên mạng của bạn sẽ không hài lòng với bạn gây ra các thông báo "vỗ địa chỉ IP" không cần thiết tại bộ định tuyến, như hệ thống vẫn có thể trả lời các yêu cầu ARP cho cả hai IP trên cả hai giao diện. Hoặc nếu bạn có bảo vệ chiếm quyền điều khiển IP trong mạng, nó có thể tham gia và vô hiệu hóa tất cả lưu lượng truy cập vào hệ thống của bạn.
telcoM
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.