
여러 인터페이스가 있는 Debian Stretch 시스템에서 특정 인터페이스를 통해 기본 경로를 정의해야 합니다 ens3
. 이 인터페이스는 dhcp를 통해 IP 주소를 받습니다 10.33.34.2
.
내 필요에 맞게 다음 가이드를 조정했습니다.
그래서 /etc/systemd/network/route.network
다음 내용으로 파일을 만들었습니다.
[Match]
Name=ens3
[Network]
Gateway=10.33.34.1
그러나 시작 시 기본 경로가 올바르게 설정되지 않습니다.
systemd-networkd
다음에 따라 디버깅을 활성화했습니다 .systemd-networkd를 디버깅하는 방법은 무엇입니까?
다시 시작한 후 systemd-networkd
로그에 다음이 표시됩니다.
Aug 21 13:43:13 vpn systemd-networkd[15671]: ens3: Setting routes
Aug 21 13:43:13 vpn systemd-networkd[15671]: ens3: Could not set route: Network is unreachable
Aug 21 13:43:13 vpn systemd-networkd[15671]: ens3: Routes set
Aug 21 13:43:13 vpn dhclient[15709]: Listening on LPF/ens3/52:54:00:3f:f1:d0
Aug 21 13:43:13 vpn dhclient[15709]: Sending on LPF/ens3/52:54:00:3f:f1:d0
Aug 21 13:43:13 vpn dhclient[15709]: Sending on Socket/fallback
Aug 21 13:43:13 vpn dhclient[15709]: DHCPDISCOVER on ens3 to 255.255.255.255 port 67 interval 8
Aug 21 13:43:13 vpn dhclient[15709]: DHCPREQUEST of 10.33.34.2 on ens3 to 255.255.255.255 port 67
Aug 21 13:43:13 vpn dhclient[15709]: DHCPOFFER of 10.33.34.2 from 10.33.34.1
Aug 21 13:43:13 vpn dhclient[15709]: DHCPACK of 10.33.34.2 from 10.33.34.1
Aug 21 13:43:13 vpn systemd-networkd[15671]: ens3: Adding address: 10.33.34.2/24 (valid forever)
IP 주소가 dhcp를 통해 할당되기 전에 networkd가 경로 설정을 시도하는 것 같습니다.
systemd를 사용하여 기본 경로를 특정 인터페이스로 설정하려면 어떻게 해야 합니까?
== 편집 ==
systemd-networkd가 인터페이스를 가져온다고 가정한 것은 틀렸습니다. 시스템을 다시 시작하면 다음과 같이 표시됩니다.
$ sudo service systemd-networkd status
● systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; disabled; vendor pres
Drop-In: /etc/systemd/system/systemd-networkd.service.d
└─10-debug.conf
Active: inactive (dead)
Docs: man:systemd-networkd.service(8)
따라서 /etc/systemd/network/route.network
부팅 시 구성이 적용되지 않습니다. 현재 모든 네트워크 장치를 불러오는 역할을 담당하는 서비스가 무엇인지 궁금합니다.
== 편집 2 ==
스티븐 아이브슨(Steven Iveson)의 이 기사systemd-udevd
네트워크 장치가 시작되는 방법 과 인터페이스 구성을 수정하는 방법에 대한 좋은 통찰력을 제공합니다 .
테스트하고 추가 내용을 읽으면서 문제를 다시 설명하겠습니다. 여러 인터페이스가 무작위 순서로 표시됩니다. 각각은 올바른 dhcp 구성을 얻습니다. 불러올 첫 번째 인터페이스는 기본 경로를 설정하므로 10.33.34.1
항상 기본 경로로 사용되지는 않습니다 .
답변1
만약에모두인터페이스가 기본 경로를 통해 유효한 DHCP 제안을 받으면 이를 무시하도록 구성할 수 있는 방법이 없습니다. 이는 , 또는 init 시스템에 연결된 다른 것으로 dhclient
수행할 수 있는 작업이 아닙니다 .systemd
udev
이를 수행하는 한 가지 방법이 설명되어 있습니다.여기: 의 "후크" 디렉토리 중 하나에 쉘 스크립트 조각을 생성합니다(물론 편집기를 사용할 수도 있음) dhclient
.
cat << EOF > /etc/dhcp/dhclient-enter-hooks.d/restrict-default-route
## Only the DHCP server talking to ens3 is allowed to give us a default
## route. Other interfaces only get local-segment configuration.
case ${interface} in
ens3)
;;
*)
unset new_routers
;;
esac
EOF
routers
에 대한 기본 경로가 있는 옵션 만 허용됩니다 ens3
. 타이밍에 문제가 없고 사용할 파일을 파악하는 데 문제가 없으며 경로는 DHCP 제안을 받은 경우 systemd
에만 유효합니다 .ens3
답변2
Debian Stretch의 경우 인터페이스 이름은 udev로 지정되며 기본 구성은 /etc/network/interfaces
. 편집 2에서 설명한 대로 여러 인터페이스가 무작위 순서로 표시됩니다. 각각은 올바른 dhcp 구성을 얻습니다. 불러올 첫 번째 인터페이스가 기본 경로를 설정합니다. 원하는 인터페이스에 대한 기본 경로만 수락하면 됩니다. 이것은 될 수있다후크로 달성~로dhcpclient
새 후크 스크립트를 추가합니다 /etc/dhcp/dhclient-enter-hooks.d/nodefaultroute
.
#!/bin/sh
## Prevent DHCP server on eth0 from forcing a default route on us
case ${interface} in
ens8|ens9)
printf "executing ip route delete default via $new_routers\n"
ip route delete default via $new_routers
;;
*)
;;
esac
ens8|ens9
기본 경로를 허용할 수 없는 모든 인터페이스를 나열하도록 확장할 수 있습니다 .