dhcp로 구성된 여러 인터페이스를 사용하여 Debian Stretch에서 기본 경로 설정

dhcp로 구성된 여러 인터페이스를 사용하여 Debian Stretch에서 기본 경로 설정

여러 인터페이스가 있는 Debian Stretch 시스템에서 특정 인터페이스를 통해 기본 경로를 정의해야 합니다 ens3. 이 인터페이스는 dhcp를 통해 IP 주소를 받습니다 10.33.34.2.

내 필요에 맞게 다음 가이드를 조정했습니다.

5.3. GUI가 없는 최신 네트워크 구성

그래서 /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수행할 수 있는 작업이 아닙니다 .systemdudev

이를 수행하는 한 가지 방법이 설명되어 있습니다.여기: 의 "후크" 디렉토리 중 하나에 쉘 스크립트 조각을 생성합니다(물론 편집기를 사용할 수도 있음) 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기본 경로를 허용할 수 없는 모든 인터페이스를 나열하도록 확장할 수 있습니다 .

관련 정보