매우 이상한 동작을 보이는 아치형 Linux 상자가 있습니다. 시작 시 인터페이스를 시작하고 필요에 따라 구성하기 위해 호출되는 스크립트가 있습니다. 즉:
ip link add link eth0 name mgt10 type vlan id 10
ip link add link eth0 name guest20 type vlan id 20
ip link set mgt10 up
ip addr add 10.10.0.1/24 dev mgt10
ip link set guest20 up
ip addr add 10.20.0.1/24 dev guest20
이 스크립트를 호출한 후 인터페이스가 작동되고 적절한 IP가 할당된 것을 확인합니다.
# ip addr show
1: mgt10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 10.10.0.1/24 scope global mgt10
valid_lft forever preferred_lft forever
2: guest20@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 10.20.0.1/24 scope global guest10
valid_lft forever preferred_lft forever
그러나 문제는 어떤 이유로든 mgt10에 대한 로컬 경로를 생성하지 않는다는 것입니다.
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.20.0.0 0.0.0.0 255.255.255.0 U 0 0 0 guest20
오류가 표시되지 않으며 인터페이스에서 IP를 수동으로 제거한 다음 다시 추가하면(동일한 명령을 복사/붙여넣기) 문제 없이 라우팅이 예상대로 나타납니다.
이유를 모르겠습니다. 물리적 링크가 설정되고 있는데 시스템에 문제가 있는 것은 아닐까요? 인터페이스가 할당 준비가 되었는지 확인하는 방법이 있습니까? 내가 여기서 뭔가 잘못하고 있는 걸까요?
답변1
시작 스크립트에서 ip link 명령을 사용하는 특별한 이유가 있습니까? 아치 위키에는 systemctl을 사용하여 VLAN을 만드는 방법에 대한 몇 가지 예가 있습니다. 여기 예제를 수정하는 것이 좋습니다.https://wiki.archlinux.org/index.php/VLAN#Starting_at_boot
이를 통해 VLAN을 서비스로 활성화하고 문제가 발생할 경우 로깅할 수 있는 이점을 얻을 수 있습니다.
systemctl 외에도 netctl을 사용해 볼 수도 있습니다. /etc/netctl/examples에는 수정할 수 있는 VLAN 예제 스크립트가 포함되어 있습니다. 다시 말하지만, 프로필이 시작 시 실행되도록 프로필을 활성화하고 로그 파일을 확인하여 Journalctl 등을 사용하여 실행되는 방식을 확인할 수 있습니다.
답변2
최근 Debian 11 시스템에서 비슷한 문제가 발생했습니다. 인터페이스에 대한 로컬 경로가 생성되지 않았지만 오류는 없었습니다.
나는 당신의 문제가 다른 이유로 생각합니다. 내 경우에는 /etc/network/interfaces 파일을 수동으로 편집하고 주소 표시줄에 서브넷 마스크를 추가하는 것을 무시했다는 것이 문제였습니다. 그래서 파일에는
iface vmbr0 inet static
address 10.100.17.56
바꾸다
iface vmbr0 inet static
address 10.100.17.56/24
따라서 운영 체제는 줄 끝에 암시적 "/32"가 있는 것으로 해석하므로 로컬 네트워크 경로를 올바르게 생성하지 않습니다.
출력에 단서가 있지만 ip a
처음에는 놓쳤습니다. IP의 마스크는 /24가 아니라 /32입니다.
6: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:62:0b:d5:a2:a0 brd ff:ff:ff:ff:ff:ff
inet 10.100.17.56/32 scope global vmbr0
valid_lft forever preferred_lft forever