Cisco 및 Linux 및 Vlan


9

Linux에서 VLAN이 작동하는 방식에 대한 근본적인 오해가있는 것으로 보이며 여기에 좋은 사람들이 저를 교육시킬 수 있기를 바랍니다.

전송 : 하나의 Cisco 3560, 하나의 VLAN 및 하나의 Linux 상자 [1].

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

Cisco에는 IP 주소가 10.40.37.252/24 인 Vlan 37 인터페이스가 있습니다. Linux 상자에 10.40.37.1/24를 배치하고 싶습니다.

Cisco가 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

내가 여기서 무엇을 놓치고 있습니까?

편집 : 솔루션 :

mac 주소 테이블에 대한 Shane의 질문으로 해결책을 찾았습니다. "ip addr"을 사용하여 각 VLAN 하위 인터페이스에 서로 다른 고유 한 L2 (MAC) 주소를 설정하면 갑자기 작동합니다.

시도하지 않은 또 다른 해결책은 (하드웨어가 너무 오래 되었기 때문에) "ethtool"을 사용하여 NIC 자체에 의한 VLAN 오프로드를 비활성화하고 커널이 태그를 처리하도록하는 것입니다.

감사합니다 셰인!

편집 : 의견에 따른 추가 정보 :

전체적인 목표는 리눅스 박스에서 3 개의 개별 IP 주소에서 3 개의 VLAN (public, private, oam & p)을 종료하고 로컬 주소에 다른 애플리케이션을 바인딩하는 것입니다. 필요한 경우 더 확장 할 수는 있지만 문제 설명과 토론을 간단하게 유지하려고합니다. 세 개의 VLAN을 작동시키기 전에 하나의 작업이 필요하기 때문입니다. :)

앙투안 -> 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

-> 와이어 샤크 및 / 또는 태그를 보여 주지만,이 때문에 커널 [6]에서 VLAN을 취급 및 PCAP의 처리 순서에 분명히 리눅스에서 정상 제한하지 않습니다 tcpdump를. 또한 태그가 지정되지 않은 VLAN은 1로 설정됩니다 [7].

[1] CentOS 5.5와 Ubuntu 11.04에서 모두 시도했지만 동일한 문제가 있습니다.

[2] 구성은 잘라 내기 및 붙여 넣기가 아니므로 오타는 단순히 내 나쁜 기억입니다.

[3] "협상하지 않음"설정 또는 해제는 문제에 영향을 미치지 않습니다.

[4] Vlan 37은 링크에서 활성 및 정리되지 않은 것으로 표시되므로 "허용"은 문제가되지 않습니다.

[5] serverfault : nic에서 8021q 활성화

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

[7] 기본 (태그 없음) VLAN은 1입니다. "스위치 트렁크 기본 VLAN 1"로 수동 설정해도 아무런 영향이 없습니다.


ifconfig eth0 0.0.0.0 대신 ifup eth0을 사용해 보셨습니까?
Antoine Benkemoun

lsmod리눅스 박스에 출력을 게시 할 수 있습니까 ?
pepoluan

2
무엇 ifconfig eth0.37및 / 또는 ifconfig -a모양?
Handyman5

또한 게시하십시오 /proc/net/vlan/config?
Handyman5

1
sho mac address-table vlan 37?
Shane Madden 5

답변:


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을 사용하거나 태그 된 트래픽을 전달하도록 스위치 conf를 변경하면됩니다.

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

상당히 오래된 IOS 장치에서는 트럭 캡슐화를 8021q로 설정해야합니다. 기본값은 ISL입니다.


액세스는 제대로 작동했지만 트렁크는 그렇지 않았습니다. 목표는 각각 자체 서브넷이 있고 Linux 상자에서 끝나는 3 개 이상의 VLAN을 갖는 것입니다. 해결책 / 해결 방법은 Linux 측의 각 VLAN에 고유 한 MAC 주소가 있는지 확인하는 것입니다.
Darren H

"작업"의 의미에 따라 다릅니다. IOS 장치에 액세스 모드의 포트가 있으면 " 이 포트에 입력 된 모든 패킷에 [스위치 내부]가 vlan X로 태그 지정됨"을 의미합니다. 즉, Linux 호스트에서 추가 한 802.1q 헤더가 제거되는 것을 의미합니다. vlan 37에서 액세스 모드로 설정된 다른 포트에서 tcpdump를 실행하여이를 쉽게 증명할 수 있습니다. 리눅스 박스에있는 세 개의 "vlan"인터페이스의 브로드 캐스트 트래픽을 볼 수 있어야합니다.
Joshua Hoblitt

나는 두 가지를 언급 ​​했어야했다. 1) 프로덕션 가상화 환경에서 Cisco & Blade Networks 스위치와 함께 centos 5에서 VLAN 태그를 사용합니다. 2) switch port mode access송신 트래픽에서 모든 802.1q 태그도 제거합니다. 그렇기 때문에 통신이 전혀 이루어지지 않도록 mac 주소를 다루어야했습니다. 맥 주소가 다른 대상이 없으면 패킷이 vlan 태그없이 Linux 호스트로 전달 될 때 기본 VLAN 인터페이스에서 모두 종료됩니다 .
Joshua Hoblitt

명확성을 위해, IOS에서 "트렁크"는 802.1q VLAN 태그를 사용하는 것을 의미합니다.
Joshua Hoblitt

0

이제 나는 리눅스 지식을 가지고 있지 않습니다. 스위칭 지식으로 가면 리눅스 머신에 eth0 인터페이스가 dot1q 트렁킹을 위해 구성되어 있습니까? Linux 시스템 내에서 여러 VLAN이 작동하는지 여부는 알 수 없지만 Vlan37의 일부로 작동하도록 구성된 단일 인터페이스가 있다고 가정하여 Linux 시스템의 NIC를 액세스 포트로 만듭니다. 액세스 포트는 트렁크 포트와 직접 통신 할 수 없으므로 트렁크 캡슐화를 만들거나 이해할 수 없습니다.

내가 이해 한 바에 따르면 Linux 시스템이 Vlan 37 내에서 작동하기를 원합니다. ge0 / 1 포트를 Vlan37의 액세스 포트로 되돌리고 Vlan37의 서브넷 아래에있는 모든 IP를 정기적으로 Linux 시스템에 할당하십시오. 단일 링크를 통해 여러 Vlan 정보를 전달하는 데만 사용되는 트렁킹은 실제로 필요하지 않습니다.


1
vconfig 부분은 dot1q 트렁킹을 구성합니다 :)
Antoine Benkemoun

최종 목표는 Linux 시스템에서 여러 VLAN을 종료하는 것입니다. 나는 먼저 일을해야한다;)
대런 H

당신은 당신의 리눅스 머신이 여러 개의 Vlan의 일부가되거나 Vlan37에 머무르기를 원한다면 다른 여러 개의 Vlan에서 액세스 할 수 있어야합니까?
gokul varma nk

전자-리눅스 머신은 각각 자체 VLAN에 여러 개의 겹치지 않는 IP 주소를 가져야합니다. 이를 명확하게하기 위해 본체를 편집했습니다.
Darren H

0

스위치 구성에 문제가 있다고 생각합니다. 802.1q 태그를 사용하여 포트를 트렁크 모드로 설정 한 후 태그가있는 트래픽으로 VLAN 37을 전송하도록 스위치를 구성해야하며 태그가 지정되지 않은 트래픽에 다른 VLAN을 사용하도록 포트를 설정해야 할 수도 있습니다. 이 설정을 할 때 해당 포트에서 어떤 VLAN을 허용 / 거부해야하는지 설정해야했습니다. 내 IOS는 약간 녹슨지만 이것이 당신이 찾고있는 것이라고 생각합니다.

또한 패킷에 VLAN 태그가 표시되므로 eth0에서 wireshark를 사용하여 스위치 구성을 확인할 수 있어야합니다. Cisco LLDP 패킷은 또한 ge0 / 1 포트가 수행하는 작업에 대한 힌트를 제공 할 수 있습니다.


게시 할 때 글 머리 기호 3과 4를 보지 못했습니다. 스위치에 대한 트래픽이 vlan 37로 전송되고 있는지 확인할 수 있기 때문에 wireshark를 계속 시도합니다.
chuck

Linux의 Wireshark는 종종 VLAN 태그를 표시 할 수 없으며 불행히도 여기에 해당합니다. 위의 편집 된 질문에서 새로운 각주 [6]를 참조하십시오.
Darren H

asker 설정에 따른 기본값은 vlan 1을 기본 vlan으로, 다른 모든 태그는 vlan으로 태그를 지정합니다.
MikeyB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.