Điểm:0

Linux: cầu so với vlan so với tcpdump

lá cờ pk

Tôi có một máy chủ Proxmox với kernel 5.15.19-2-pve.

Nó có giao diện bond0 được tạo từ eth2 và eth3, giao diện này nhận lưu lượng được gắn thẻ vlan.

Tôi đã tạo một cây cầu vmbr666 hiển thị như thế này:

# /etc/mạng/giao diện:
tự động vmbr666
hướng dẫn sử dụng iface vmbr666 inet
        liên kết cầu cảng0
        tắt cầu nối
        cầu-fd 0
        cầu-vlan-nhận biết có
        cầu-vids 2-4094
        mtu 9220

# brctl hiển thị
vmbr666 8000.5a0a13a9dd29 không ràng buộc0
                                                        tap151034i1
# ip -d liên kết sh dev vmbr666
66: vmbr666: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9220 trạng thái qdisc noqueue UP mode MẶC ĐỊNH nhóm mặc định qlen 1000
    liên kết/ether 5a:0a:13:a9:dd:29 brd ff:ff:ff:ff:ff:ff lăng nhăng 0 minmtu 68 maxmtu 65535 
    cầu forward_delay 0 hello_time 200 max_age 2000 ageing_time 30000 stp_state 0 ưu tiên 32768 vlan_filtering 1 vlan_protocol 802.1Q bridge_id 8000.5a:a:13:a9:dd:29 được chỉ định root 8000.5a:a:13:a9:dd:29 root_port 0 root_path_change 0 cấu trúc liên kết 0 topology_change_detected 0 hello_timer    0.00 tcn_timer    0.00 topology_change_timer    0.00 gc_timer  251.81 vlan_default_pvid 1 vlan_stats_enabled 0 vlan_stats_per_port 0 group_fwd_mask 0 group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1 mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 16 mcast_hash_max 4096 mcast_last_member_count 2 mcast_startup_query_count 2 mcast_last_member_interval 100 mcast_membership_interval 26000 mcast_querier_interval 25500 mcast_query_interval 12500 mcast_query_response_interval 1000 mcast_startup_query_interval 3124 mcast_stats_enables 536 gso_max_seg 65535 

Lưu ý rằng vlan_filtering1.

Nếu tôi tcpdump -enlvvv trên bond0, tôi thấy lưu lượng cho VLAN42. Nếu tôi bật tcpdump vmbr666 hoặc tap151034i1, tôi không thấy lưu lượng cho VLAN42 (thậm chí không phát sóng hoặc phát đa hướng, mặc dù tôi thấy lưu lượng quảng bá của một số VLAN khác). Câu hỏi: tại sao không?

Đầu ra có liên quan từ cầu -c vlan hiển thị:

trái phiếu0 1 PVID Đi ra Untagged
                  2-99
tap151034i1 1 Đầu ra PVID Untagged
                  2-99
vmbr666 1 PVID Lối ra Untagged

Như tôi đã nói, tôi thấy lưu lượng truy cập cho các Vlan khác trên tất cả các giao diện này, bao gồm cả các thẻ, ví dụ:.

15:03:35.293420 00:50:56:b1:24:0c > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), chiều dài 64: vlan 49, p 0, ethertype ARP (0x0806) , Ethernet (len 6), IPv4 (len 4), Yêu cầu ai có 10.76.155.200 cho biết 10.76.155.51, độ dài 46

Bây giờ hãy thêm vlan 42 vào vmbr666 interface để xem nó có khác biệt gì không:

# cầu vlan thêm vid 42 dev vmbr666 tự
# bridge -c vlan show dev vmbr666        
cổng vlan-id  
vmbr666 1 PVID Lối ra Untagged
                  42

Trong tcpdump -enlvvv -i vmbr666 Tôi vẫn không thấy bất cứ điều gì liên quan đến vlan42, chỉ là các Vlan khác (ví dụ: 49 và 50).

Hãy tạo subinterface cho vlan42 trên tap151034i1 như thế này:

liên kết ip thêm liên kết tap151034i1 tên kiểm tra loại giao thức vlan 802.1q id 42 reorder_hdr trên gvrp trên mvrp trên loose_binding tắt; liên kết ip thiết lập kiểm tra dev

Đang chạy kiểm tra tcpdump -enlvvv -i Tôi thấy không có lưu lượng truy cập nào cả.

Đây là một vmbr42, có thể gây cản trở (nhưng nếu vậy thì tại sao lại gây cản trở?):

vmbr42 8000.9a0f54fe1040 không liên kết0.42
                                                        fwpr103p0
                                                        fwpr104p0
                                                        fwpr105p0
                                                        fwpr151034p0
                                                        tap102i0

Trong liên kết ip -d sh:

31: vmbr42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 trạng thái qdisc noqueue UP mode MẶC ĐỊNH nhóm mặc định qlen 1000
    liên kết/ether 9a:0f:54:fe:10:40 brd ff:ff:ff:ff:ff:ff lăng nhăng 0 minmtu 68 maxmtu 65535 
    cầu forward_delay 0 hello_time 200 max_age 2000 ageing_time 30000 stp_state 0 ưu tiên 32768 vlan_filtering 0 vlan_protocol 802.1Q bridge_id 8000.9a:f:54:fe:10:40 được chỉ định_root 8000.9a:f:54:fe:10:40 root_port 0 root_path_change 0 cấu trúc liên kết 0 topology_change_detected 0 hello_timer    0.00 tcn_timer    0.00 topology_change_timer    0.00 gc_timer   53.08 vlan_default_pvid 1 vlan_stats_enabled 0 vlan_stats_per_port 0 group_fwd_mask 0 group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1 mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 16 mcast_hash_max 4096 mcast_last_member_count 2 mcast_startup_query_count 2 mcast_last_member_interval 100 mcast_membership_interval 26000 mcast_querier_interval 25500 mcast_query_interval 12500 mcast_query_response_interval 1000 mcast_startup_query_interval 3124 mcast_stats_enables 536 gso_max_seg 65535 

Lưu ý rằng vlan_filtering0.

Đang chạy tcpump -enlvvv trên vmbr42 hoặc tap102i0, là một trong những thành viên của nó, hiển thị lưu lượng VLAN42, không có thẻ -- không có gì ngạc nhiên.

Không có bảng ebtables hoặc bảng xếp chồng quy tắc.

Tôi đoán là tôi không hiểu sự tương tác giữa tư cách thành viên VLAN và giao diện cầu nối trong Linux.

Một số câu hỏi lý thuyết:

  1. Tác dụng của việc thêm Vlan vào giao diện chính của cầu nối với bản thân từ khóa trong cầu thêm vlan?
  2. Tác dụng của việc tạo giao diện con Vlan của giao diện thành viên cầu nối là gì?
  3. Nếu một giao diện vật lý có một giao diện con Vlan và được thêm vào một cầu nối, thì có bất kỳ khung nào cho Vlan đó được cho là hiển thị trên các cầu nối khác mà cùng một giao diện vật lý là thành viên không? Nếu không, tai sao không?
  4. Sự khác biệt là gì, từ góc độ lý thuyết cũng như thực tế, giữa một mặt, tạo ra các giao diện con VLAN của các giao diện vật lý và bắc cầu chúng, và mặt khác, cho phép vlan_filtering trên một cây cầu và sử dụng cầu vlan pvid untagged để đưa ra một số giao diện thành viên trong VLAN cụ thể?
  5. Bạn có thể kết hợp hai cách tiếp cận này không?

CHỈNH SỬA: đã xóa nội dung được hiển thị trong nhận xét là không liên quan và thêm câu hỏi lý thuyết để hy vọng giúp cấu trúc câu trả lời tốt hơn.

Nikita Kipriyanov avatar
lá cờ za
Bạn đang sử dụng cầu nối nhận biết vlan hay không nhận biết vlan trong Proxmox? Xin vui lòng, hiển thị ví dụ cấu hình của nó từ `/etc/network/interfaces`. Ngoài ra, xin lưu ý rằng đối với các cầu nhận biết vlan `brctl` từ `bridge-utils` là công cụ *không phù hợp*; sử dụng các tiện ích `ip` và `bridge` từ gói `iproute2` (và nhân tiện, Debian hiện đại ngày nay sử dụng các tiện ích này để thiết lập cầu nối). Để xem xét cài đặt VLAN, hãy sử dụng một số thứ như `bridge vlan show`, để nô lệ hóa giao diện â `ip link ... set master ...`, v.v. // Để xem các thẻ VLAN trong tcpdump, hãy sử dụng tùy chọn `tcpdump -e`.
András Korn avatar
lá cờ pk
Cầu được tạo bằng Proxmox GUI và không hiển thị trong `/etc/network/interfaces`. `brctl show` là thứ duy nhất tôi sử dụng từ `bridge-utils` và nó hoạt động tốt cho dù `vlan_filtering` có được bật hay không. `vmbr666` đã được kích hoạt chưa (vì vậy nó "nhận biết vlan"); những người khác thì không. Tôi đã kiểm tra `bridge vlan show` -- có thể bạn chưa hiểu sâu về câu hỏi?
András Korn avatar
lá cờ pk
Tôi đã cập nhật câu hỏi để nó bao gồm giá trị của `vlan_filtering` cho cả hai cây cầu mà tôi đã kiểm tra.
Nikita Kipriyanov avatar
lá cờ za
Mạng Proxmox được đưa vào `/etc/network/interfaces` hoặc có thể là một số tệp trong thư mục thả xuống `/etc/network/interfaces.d/`. Tập tin đó có cùng cú pháp.
András Korn avatar
lá cờ pk
À, bạn nói đúng, nó tự đổ nó vào `interfaces`, thậm chí không phải `interfaces.d` (tôi đã xem xét ở đâu, hy vọng tất cả các phần mềm hiện đại đều sử dụng cơ chế `.d`.
Nikita Kipriyanov avatar
lá cờ za
Ngoài ra, hãy sử dụng `bridge -c vlan show`. Nó "nén" dãy VLAN thành một vài dòng. Ngoài ra, tôi không thấy mục `vmbr666` hoặc `vmbr42` trong `bridge vlan show` của bạn. Những vlan nào được bật trên cổng đó? Theo mặc định, Proxmox không kích hoạt tất cả các vlan trên cổng cầu nối "máy chủ".
Nikita Kipriyanov avatar
lá cờ za
Tôi có đúng không, bạn có bond0.42 là giao diện con vlan 42 của bond0 và nó là nô lệ của vmbr42, đồng thời bond0 của bạn cũng là nô lệ của vmbr666? Thiết lập này là hơi say. Các gói được gắn thẻ 42 nên giả sử đường dẫn nào, tới giao diện con vmbr42 qua bond0.42 hoặc tới vmbr666 qua bond0? Tôi cá đó là cái đầu tiên.
András Korn avatar
lá cờ pk
Vâng, chính xác trên tất cả các tính. Tôi đồng ý với bạn rằng thiết lập không hoạt động như mong đợi, nhưng tôi không nghĩ rằng nó nhất thiết phải "bị vặn". :) Tôi mong đợi các gói 42 được gắn thẻ sẽ hiển thị ở cả hai nơi - trên bond0.42 không có thẻ, cũng như trên vmbr666 có thẻ. Nếu đây là một công tắc vật lý, tôi chắc chắn có thể có nhiều giao diện trong vlan42 như tôi muốn, đồng thời có và không có gắn thẻ. Tôi cũng nghi ngờ rằng vmbr42 "ăn" các khung mà tôi mong đợi sẽ thấy trên vmbr666, nhưng chưa xác minh điều này.
Nikita Kipriyanov avatar
lá cờ za
Trước khi giới thiệu cầu nối nhận biết VLAN, Linux đã hướng mọi thứ đến giao diện "chính" nếu nó nằm trong cầu nối (trong đó eth0.10 sẽ nhận được thẻ vlan 10 trên eth0, nhưng nếu bạn đặt eth0 vào một số cầu nối, eth0.10 sẽ không thấy bất kỳ giao thông â nó sẽ ở trong cầu). Sau khi giới thiệu cầu nối nhận biết Vlan, mọi thứ về cơ bản đã thay đổi ngược lại.
Điểm:0
lá cờ za

Mua tại sao nó phải xuất hiện trên giao diện cầu?

Hãy coi cầu nối Linux là một "công tắc L2 được quản lý ảo", trong đó giao diện cầu nối là phương tiện để chính máy chủ được kết nối với công tắc.Vì vậy, giao diện cầu nối được coi là một "cổng chuyển đổi" nơi máy tính chủ được "kết nối".

Bây giờ, hãy thay đổi công tắc "ảo" thành công tắc thực trong một phút. Một số cổng đang giao tiếp với một số cổng khác. Bản chất của công tắc là lưu lượng truy cập này sẽ không hiển thị trên các cổng khác: nó chỉ làm tràn lưu lượng truy cập khi không biết địa chỉ MAC đích tồn tại ở cổng nào hoặc địa chỉ đó có được quảng bá hay không.

Quay lại cài đặt "ảo" của chúng tôi: cổng máy ảo nói chuyện với cổng "vật lý" là bond0, tại sao lưu lượng này lại được nhìn thấy trên cổng thứ ba không liên quan (là cổng "host", được đặt tên theo chính cây cầu) ? Các truy vấn ARP là các gói phát sóng duy nhất xuất hiện trên mạng và chúng được phát sóng đúng cách, vì vậy bạn có thể nhìn thấy chúng; phần còn lại thì không.

STP BPDU là những con thú khác nhau. Cầu nối với quá trình xử lý STP được bật sẽ tự tạo chúng và gửi đến từng cổng (đã bật STP). Nếu bạn thấy nó trên máy chủ, điều đó có nghĩa là bạn đã định cấu hình sai thứ gì đó. Tốt hơn nên tắt STP trên cầu nối và cũng định cấu hình cổng ở phía bên kia (giao diện được liên kết, ví dụ: Kênh cổng nếu đó là Cisco, v.v.) thành thụ động cho STP (không gửi bất kỳ BPDU nào đến cổng, chặn cổng nếu nhận được BPDU).


CẬP NHẬT:

PVE không kích hoạt các vlan ngẫu nhiên trên cổng máy chủ. Đây là cách của tôi bridve -c vlan hiển thị nhìn:

root@vh2:~# bridge -c vlan show
cổng vlan-id  
enp5s0f0 1 Đầu ra PVID Untagged
                  2-4094
vmbr0 1 PVID Lối ra Untagged
veth105i0 111 PVID Lối ra Untagged
veth110i0 1 PVID Lối ra Untagged
                  2-4094
veth107i0 1 PVID Lối ra Untagged
                  2-4094

(đó là một cái hoàn chỉnh). Cấu hình của cây cầu này trong /etc/mạng/giao diện về cơ bản giống như của bạn. Bạn có thể thấy, vmbr0 (là cầu nối duy nhất trên máy chủ này) không có bất kỳ Vlan nào ngoài 1 (thực tế là 108 chưa được gắn thẻ trong mạng này).Vì vậy, ngay cả khi tôi tạo vmbr0.111 (giao diện con VLAN ID 111 của cầu), nó sẽ không thấy bất kỳ lưu lượng nào, cho đến khi tôi thêm Vlan đó vào giao diện vmbr0, mặc dù thực tế VLAN 111 ở đó rất ồn ào.


Tại sao bạn lại tranh cãi với tôi? Tôi đang làm công việc này ít nhất 14 năm:

root@vh2:~# liên kết ip add testbr type bridge vlan_filtering 1 vlan_protocol 802.1Q
root@vh2:~# ip tuntap add tap0 mode tap
root@vh2:~# ip link set tap0 master testbr
root@vh2:~# bridge -c vlan show dev testbr
cổng vlan-id  
testbr 1 PVID Lối ra Untagged
root@vh2:~# bridge -c vlan show dev tap0
cổng vlan-id  
tap0 1 PVID Đi ra Untagged
root@vh2:~# bridge vlan add vid 100 dev testbr self pvid untagged
root@vh2:~# bridge vlan add vid 100 dev tap0 pvid untagged
root@vh2:~# bridge vlan del vid 1 dev testbr self
root@vh2:~# bridge vlan del vid 1 dev tap0
root@vh2:~# bridge vlan add vid 200 dev testbr self
root@vh2:~# bridge -c vlan show dev testbr
cổng vlan-id  
testbr 100 PVID Lối ra Untagged
                  200
root@vh2:~# bridge -c vlan show dev tap0
cổng vlan-id  
tap0 100 PVID Đi ra Untagged
root@vh2:~# ip tuntap del tap0 mode tap
root@vh2:~# liên kết ip del testbr
András Korn avatar
lá cờ pk
Tôi cũng không thấy các truy vấn ARP liên quan đến VLAN42 trên `vmbr666` và khi tôi tạo một giao diện vlan42 rõ ràng được gắn vào cầu, nó vẫn không nhận được bất kỳ lưu lượng truy cập nào - thậm chí không trả lời các truy vấn ARP mà nó gửi. (Tôi vẫn cần kiểm tra xem các truy vấn ARP có rời khỏi máy chủ hay không.)
András Korn avatar
lá cờ pk
Tôi đánh giá cao việc bạn đang cố gắng trợ giúp, nhưng thiết lập bạn đã dán không giống với trường hợp của tôi. Trong trường hợp của tôi, tất cả các giao diện có liên quan đều có tất cả tư cách thành viên Vlan. Bạn cũng không thể `bridge vlan thêm` một VLAN vào một giao diện bridge chẳng hạn như `vmbr0`, trừ khi bản thân giao diện đó cũng là một thành viên bridge. Hãy tiếp tục và dùng thử (bạn sẽ nhận được `câu trả lời của RTNETLINK: Thao tác không được hỗ trợ`). Tôi cũng không tạo giao diện vmbr666.42 mà tạo giao diện .42 của thành viên cầu nối (`tapXXXXX.42`).
Nikita Kipriyanov avatar
lá cờ za
Không, bạn hoàn toàn sai. **Giao diện cầu nối như `vmbr0` luôn là thành viên cầu nối**, nó là thành viên của chính cầu nối và nó biểu thị cổng kết nối máy chủ với cầu nối. Tôi đã làm điều đó nhiều lần, tôi đã làm điều đó bằng cách sử dụng các tệp giao diện Debian (tệp này thực sự là một phần của cụm). Tôi có một hệ thống được xây dựng với cấu hình mạng systemd trong đó một số vòi OpenVPN có các PVID khác nhau và bản thân giao diện cầu nối có một PVID khác và NIC vật lý là trung kế được gắn thẻ tất cả. Thông báo lỗi của bạn có thể xuất phát từ thực tế là bạn vừa đánh vần sai lệnh.
András Korn avatar
lá cờ pk
Tôi đã cập nhật câu hỏi của mình để cho thấy rằng đây không phải là trường hợp.
Nikita Kipriyanov avatar
lá cờ za
Bạn cực kỳ bướng bỉnh, nhưng tốt hơn hết là bạn nên cực kỳ chu đáo.Để cấu hình vlan trên giao diện master bridge, bạn thêm từ khóa "self" (được mô tả trong `man bridge`). Ngoài ra, một lần nữa, thật sai lầm khi làm bất cứ điều gì với giao diện là nô lệ cầu nối. Nó không nên có bất kỳ giao diện con vlan, cấu hình IP nào, v.v.
András Korn avatar
lá cờ pk
Tôi thực sự đã bỏ lỡ từ khóa `self` trong trang hướng dẫn. Cảm ơn đã chỉ ra điều đó. Với `self`, tôi thực sự có thể thêm vlan42 vào giao diện cầu chính vmbr666. Tuy nhiên, nó vẫn không hiển thị bất kỳ lưu lượng phát sóng nào trong vlan42 khi tôi `tcpdump -enlvvv` trên đó, chỉ phát lưu lượng truy cập cho các Vlan khác, vì vậy đây có thể là một cá trích đỏ. Tôi không chắc mình hiểu việc thêm VLAN vào giao diện cầu nối thực sự có tác dụng gì, vì tôi chỉ có `1` và `42` trên đó và nó vẫn thấy lưu lượng quảng bá trên ví dụ: vlan49 chứ không phải 42.
András Korn avatar
lá cờ pk
Và để ghi lại, tôi không "tranh luận với bạn"; Tôi đang cố gắng hiểu chuyện gì đang xảy ra và chỉ ra chỗ nào điều tôi thấy mâu thuẫn với điều bạn nói. Bạn hoàn toàn có thể đúng; Tôi hy vọng rằng cuối cùng chúng ta có thể đi đến một câu trả lời mà tôi có thể chấp nhận.
Nikita Kipriyanov avatar
lá cờ za
Việc thêm Vlan vào một cổng cầu nối cũng giống như thêm Vlan vào cổng chuyển đổi nếu đó là chuyển đổi vật lý thay cho cầu nối. Cho đến khi bạn thêm VLAN vào một cổng, cổng đó sẽ không tham gia vào VLAN và sẽ không thấy bất kỳ lưu lượng nào cho VLAN đó, cũng như cầu nối sẽ không chấp nhận bất kỳ lưu lượng nào cho VLAN đó đến từ cổng không tham gia. Một lần nữa, điều này bao gồm cổng cầu "đối mặt với máy chủ": nếu bạn muốn xem lưu lượng truy cập trên cổng, hãy thêm Vlan đó vào cổng "chính".
András Korn avatar
lá cờ pk
Nhưng, một lần nữa, điều này mâu thuẫn với những gì tôi thấy. Tôi đã không thêm bất kỳ VLAN nào vào `vmbr666` nhưng tôi có thể thấy các chương trình phát sóng cho vlan49 và 50 trên đó (chứ không phải vlan42); sử dụng `bridge vlan add ... self` để thêm vlan42 không tạo ra sự khác biệt nào có thể quan sát được.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.