
我正在 Ubuntu12.04 中運行一個我編寫的應用程序,它可以進行一些遠端交換器管理。我只有一個網路卡連接到託管交換器網路 eth0,它設定為 IPv4 10.0.0.1/24。這個 IPv4 位址是該 Ubuntu 電腦可以使用的唯一位址,因為這是分配給 Ubuntu 電腦的唯一「全域」可路由位址(由於某些網路管理,而不是由於技術問題...)
在傳送 NetConf 封包時,我需要交換器管理流量(透過 SSH 的 NetConf,使用 UDP 連接埠 830)包含帶有 VLAN ID 444 的 802.1q VLAN 標記,並且也將使用此標記接收回覆。所有其他流量(http、ftp、dhcp、snmp 等)將使用不含 VLAN 標記的 eth0。
我嘗試在 eth0 上使用 VLAN 介面 eth0.444,但發送的流量似乎不包含 VLAN 標記。
我可以(以及如何)使用 ebtables/iptables 將特定 VLAN 標記新增至特定 UDP 連接埠流量? ebtables/iptables 解決方案也適用於接收路徑嗎?
謝謝你!
大衛
答案1
iptables
且ebtables
無法在資料包上設定 VLAN 標記。這就是 VLAN 子介面的用途。
有一個Ubunut wiki 上討論 VLAN 的文章您可能應該回顧一下。但總而言之,您想要:
確保 802.1q 模組加載了
modprobe 8021q
.使用 來建立 VLAN 子介面
vconfig add eth0 444
。將 VLAN 444 中使用的子網路中的 IP 位址和子網路遮罩新增至
eth0.444
子介面ip addr add x.x.x.x/z dev eth0.444
您還需要設定伺服器所連接的交換器連接埠以接受 VLAN 444 的標記訊框。繼」或「常規」連接埠以及指派給該介面的子網路所使用的任何VLAN 的未標記成員eth0
。
請注意,tcpdump
可以顯示 VLAN 標記時出現問題tcpdump
因此,如果您只是在主機本身上使用來驗證幀是否已標記,則不一定會假設幀沒有被標記。
編輯:
通常,VLAN 和 IP 子網路之間存在一對一的關係。如果交換器在 VLAN 444 中有一個管理接口,該接口與當前eth0
端口所在的任何 VLAN 位於同一 IP 子網,則這是非常不典型的。
答案2
802.1Q 標記被插入到 MAC 標頭中,如果您的介面沒有 VLAN 標記,核心將不會對其進行解碼。因此,即使您可以修改傳出資料包,帶有 VLAN 標記的傳入流量也將被忽略。
您需要做的是建立一個帶有 VLAN 標記的接口,就像您所做的那樣,然後向其添加一個與您嘗試訪問的交換器 IP 處於同一範圍內的 IP。