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"로 수동 설정해도 아무런 영향이 없습니다.
lsmod
리눅스 박스에 출력을 게시 할 수 있습니까 ?
ifconfig eth0.37
및 / 또는 ifconfig -a
모양?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?