シスコとLinuxおよびVLAN


9

LinuxでVLANがどのように機能するかについて、いくつかの根本的な誤解があるようですが、ここの優秀な人々が私を教育してくれることを願っています。

キャスト:1つのCisco 3560、1つのVLAN、および1つのLinuxボックス[1]。

Cisco  ---------------  Linux
    ge0/1           eth0

Ciscoには、IPアドレス10.40.37.252/24のVlan 37インターフェイスがあります。Linuxボックスに10.40.37.1/24を配置します。

シスコがVLAN 37のカプセル化を解除すると、すべて正常に動作します[2]。

# Cisco 
interface Vlan37
    ip address 10.40.37.252/24

interface GigabitEthernet 0/1
    switchport mode access
    switchport access vlan 37

# Linux
ip link set eth0 up
ip addr add 10.40.37.1/24 dev eth0

$ ping 10.40.37.252 && echo It works

ただし、ポートをトランキングに設定し、Linux側でvlan 37を割り当てると、動作しなくなります。

# Cisco
interface GigabitEthernet 0/1
    switchport trunk encapsulation dot1q
    switchport mode trunk
    ! [3] [4] [7]

# Linux
vconfig add eth0 37
ip link set eth0.37 up
ifconfig eth0 0.0.0.0 up # ensure no address
ip addr add 10.40.37.1/24 dev eth0.37

$ ping 10.40.37.252 || echo Why does this not work

ここで何が欠けていますか?

編集:ソリューション:

ShaneのMACアドレステーブルに関する質問は私に解決策を導きました:「ip addr」を使用して、各VLANサブインターフェースに異なる一意のL2(MAC)アドレスを設定すると、突然機能します。

(ハードウェアが古すぎるため)試さなかったもう1つの解決策は、「ethtool」を使用してNIC自体によるVLANオフロードを無効にし、カーネルにタグを処理させることです。

シェーン、ありがとう!

編集:コメントごとの詳細情報:

全体的な目標は、3つのvlan(パブリック、プライベート、oam&p)がlinuxボックスの3つの個別のIPアドレスで終端し、さまざまなアプリケーションがローカルアドレスにバインドすることです。必要に応じてさらに拡張できますが、問題の説明とディスカッションをシンプルに保つようにしています。3つのVLANを機能させる前に、1つは機能する必要があるからです。:)

アントワーヌ - > ifupを対ifconfigコマンドには違いはありません。

Pepoluan- >これがあなたが探していたものだと思います。phyドライバによる参照の欠如は明らかに正常であることに注意してください。[5]

$ lsmod | grep 802
    8021q   25545 1 cxgb3

便利屋 ->

$ ifconfig eth0
    eth0  Link encap: Ethernet HWaddr 00:17:08:92:87:22
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:0 [...]
    TX packets:31932 errors:0 dropped:0 overruns:0 carrier:0 

$ ifconfig eth0.37
    eth0.37 Link encap: Ethernet HWaddr 00:17:08:92:87:22
    UP BROADCAST RUNNING MULTICAST MUT:1500 Metric:1
    RX packets: 0 [...]
    TX packets:32024 errors:90 dropped:0 overruns:0 carrier:0

$ cat /proc/net/vlan/config
    VLAN Dev Name | VLAN ID
    Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
    eth0.37 | 37 | eth0

チャックは - >のwiresharkおよび/またはtcpdumpのタグを表示しませんが、これは明らかに、カーネル内のVLANの取り扱いとPCAPの処理順序によるLinux上で通常の制限、[6]です。また、タグなしVLANは1に設定されます[7]。

[1]私はCentOS 5.5とUbuntu 11.04の両方でこれを試しましたが、どちらにも同じ問題があります。

[2]設定はカットアンドペーストではないので、ここでのタイプミスは単に私の悪いメモリです。

[3]「nonegotiate」をオンまたはオフにしても、問題には影響しません。

[4] VLAN 37はリンク上でアクティブかつ非プルーニングとして表示されるため、「許可」は問題ではありません。

[5] serverfaultNICで8021qを有効にする

[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux

[7]ネイティブ(タグなし)VLANは1です。「switchport trunk native vlan 1」で手動で設定しても効果はありません。


ifconfig eth0 0.0.0.0 upではなくifup eth0を試しましたか?
Antoine Benkemoun、2011

の出力をlsmodLinuxボックスに投稿できますか?
pepoluan 2011

2
どんなものかifconfig eth0.37、および/またはifconfig -aどのように見えますか?
便利屋5

また投稿してください/proc/net/vlan/config
便利屋5

1
sho mac address-table vlan 37
シェーンマッデン

回答:


2

ホストにvlan 37のみへのアクセスを許可しますか、それともホストに複数のvlanへのアクセスを許可しますか?

このIOS構成は、ネイティブ(タグなし)vlanを37に設定することを意味します。

interface GigabitEthernet 0/1
    switchport mode access
    switchport access vlan 37

Linux側では、vconfigコマンドはvlan 37としてタグ付けされたトラフィックのインターフェースエイリアスを作成します。

vconfig add eth0 37

あなたは問題を見ますか?スイッチはホストのタグなしトラフィックを送信しており、ホストはタグ付きトラフィックを検索/生成しています。

ネイティブVLAN 37でeth0を使用するか、スイッチの設定を変更して、タグ付きトラフィックを通過させる必要があります。

interface GigabitEthernet 0/1
    switchport trunk allowed vlan 37
    switchport mode trunk

かなり古いIOSデバイスでは、デフォルトでISLになるため、トラックのカプセル化を8021qに設定する必要があります。


アクセスは正常に機能しましたが、トランキングは機能しませんでした。目標は、それぞれが独自のサブネットを持ち、Linuxボックスで終端する3つ以上のVLANを持つことでした。解決策/回避策は、Linux側の各VLANが個別のMACアドレスを持つようにすることでした。
ダレンH

まあそれはあなたが「仕事」によって何を意味するかに依存します。IOSデバイスにアクセスモードのポートがある場合、これは「このポートに入力されたすべてのパケットに[スイッチの内部で] VLAN Xのタグが付けられる」ことを意味します。つまり、Linuxホストから追加した802.1qヘッダーが削除されます。これは、vlan 37でアクセスモードに設定された別のポートでtcpdumpを実行することで簡単に証明できます。Linuxボックスの3つの「vlan」インターフェイスすべてからのブロードキャストトラフィックを確認できるはずです。
ジョシュアホブリット2011

私は二つのことを述べるべきだった。1)実稼働仮想化環境のCisco&Blade NetworksスイッチでCentOS 5のVLANタグを使用すること。2)switch port mode access出力トラフィックのすべての802.1qタグも削除します。そのため、通信をまったく機能させるために、MACアドレスをいじる必要がありました。宛先が異なるMACアドレスを持たない場合、パケットはVLANタグなしで Linuxホストに送信されるため、宛先はすべてネイティブVLANインターフェイスに到達します
ジョシュアホブリット2011

明確にするために、IOSでは「トランク」とは、802.1q vlanタグを使用することを意味します。
Joshua Hoblitt、2011

0

現在、私はこのLinuxの専門家ではありません。私のスイッチングの知識から、dot1qトランキング用に構成されたLinuxマシンにeth0インターフェイスがありますか?Linuxマシン内で複数のvlanが動作するように設定されているかどうかはわかりませんが、Vlan37の一部として機能するように構成された単一のインターフェイスがあると想定しているため、基本的にLinuxマシンのNICがアクセスポートになります。アクセスポートは、トランクポートと直接通信できません。トランキングカプセル化を作成または理解することはできません。

LinuxマシンをVlan 37内で動作させたいと私が理解していることから、g​​e0 / 1ポートをVlan37の下のアクセスポートに戻し、Linuxマシンに定期的にVlan37のサブネットの下に任意のIPを割り当てるだけです。単一のリンクを介して複数のVLAN情報を伝達するためだけに使用されるトランキングは実際には必要ありません。


1
vconfigの部分はdot1qトランキングを構成します:)
Antoine Benkemoun '18

最終的な目標は、Linuxシステムで終端する複数のVLANを持つことです。私は最初に1つを動作させる必要があります;)
ダレンH

Linuxマシンを複数のVLANの一部にしたいですか、それとも、Vlan37にとどまって他の複数のVLANからアクセスできるようにする必要があるのですか?
gokul varma nk 2011

前者-Linuxマシンには、それぞれが独自のVLANにある複数の重複しないIPアドレスが必要です。本体はこれを明確にするために編集されました。
ダレンH

0

問題はスイッチの設定にあると思います。802.1qタグを使用してポートをトランクモードに設定した後、VLAN 37をタグ付きトラフィックとして送信するようにスイッチを構成する必要があります。また、タグなしトラフィックに別のVLANを使用するようにポートを設定する必要がある場合もあります。これを設定するときに、そのポートで許可または拒否されるVLANも設定する必要がありました。私のIOSは少し錆びていますが、これはあなたが探しているものだと思います。

また、パケットのVLANタグが表示されるので、eth0のWiresharkを使用してスイッチ構成を確認できるはずです。Cisco LLDPパケットは、ポートge0 / 1が何をしているのかを知る手がかりになるかもしれません。


投稿時に箇条書き3と4に気づかなかった。それはあなたがスイッチのために意味のトラフィックは、VLAN 37上で送信されていることが確認できるようになるので、私はまだのwiresharkをしようとするだろう
チャック

Linux上のWiresharkはVLANタグを表示できないことがよくありますが、残念なことに、ここではそのようになっています。上記の編集された質問の新しい脚注[6]を参照してください。
ダレンH

質問者の設定によるデフォルトでは、vlan 1がネイティブVLANとして、その他すべてがタグ付きVLANとして設定されます。
MikeyB 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.