여러 인터페이스가 있는 Ubuntu 16.04 인스턴스를 실행하고 있습니다. 두 번째 인터페이스에서 일부 경로를 구성하려고 합니다. 이 작업을 수동으로 수행할 수 있지만 재부팅해도 지속되지 않습니다.
대부분의 방법에서는 인터페이스 파일의 호출을 기반으로 /etc/network/interfaces.d/50-cloud-init.cfg로 변환되는 /etc/network/interfaces의 인터페이스를 사용하여 경로를 정의하는 것이 좋습니다.
제가 혼란스러운 점은 두 번째 인터페이스가 어디에, 어떻게 정의되어 있는지 확실하지 않다는 것입니다.
2개의 인터페이스는 ens4와 ens5입니다. ens4만 으로 정의됩니다 iface ens4 inet dhcp
. 나는 ens5에서도 비슷한 것을 볼 수 있을 것으로 기대하지만 그렇지 않습니다.
ifconfig를 실행하면 ens5가 실행 중인 것으로 표시됩니다. 또한, ip link show
보여줍니다.
아무 문제 없이 /etc/network/interfaces에 ens5를 추가할 수 있는 것 같습니다. 그렇게 하면 다른 일도 일어나는 것 같습니다. 예를 들어 이제 "ifstate.ens5" 파일이 /run/network에 나타납니다. 또한 ifdown / ifup은 인터페이스에서 작동합니다.
그러나 추가해도 post-up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1
부팅 시 경로가 생성되지는 않습니다. 하지만 ifdown을 수행한 다음 ifup을 수행하면 예상대로 경로가 추가됩니다.
제가 추가로 조사한 바에 따르면 ens5는 Google GCE 데이터 소스의 cloud-init 패키지를 통해 정의됩니다. 이는 모두 훌륭하지만 50-cloud-init.cfg 파일에 ens4만 있는 이유에 대한 답은 없습니다.
그렇다면 ens5는 어디에 정의되어 있으며 ens5에 대한 정적 경로를 어떻게 추가할 수 있습니까?
답변1
이것이 최선의 해결책인지는 확신할 수 없지만 원하는 결과를 얻을 수 있는 방법을 찾았습니다.
첫째, 저는 google_compute_engine Python 패키지가 부팅 프로세스 중 어느 시점에서 네트워크 설정 작업을 수행하고 있다고 믿습니다. "/usr/lib/python3/dist-packages/google_compute_engine/network_setup"에서 이것을 찾았습니다.
불행하게도 이 방법의 결과는 작동하는 네트워크이지만 일반적인 Ubuntu "채널" 외부에서 일부 작업을 수행한다고 생각합니다. 예를 들어 두 번째 인터페이스(ens5)는 대부분의 상황에서 작동하고 인식되지만 /etc/network/interfaces 내에 정의되어 있지 않기 때문에 이에 의존하는 모든 것은 작동하지 않을 수 있습니다.
"route"와 같은 다른 명령은 여전히 작동하는 것처럼 보이기 때문에 이것이 얼마나 큰 문제인지는 잘 모르겠습니다.
이 Google 패키지를 활용할 수 있는 방법이 있는지 잘 모르겠으므로 그것이 좋은 생각인지도 확실하지 않습니다.
하지만 현재 나의 해결책은 "에 정의된 대로 시작 스크립트를 활용하는 것입니다.https://cloud.google.com/compute/docs/startupscript".
이러한 시작 스크립트는 네트워크가 구성된 후에 실행되므로 로컬-호스트 구성 파일을 기반으로 호스트에서 일련의 작업을 수행하는 스크립트 스크립트를 버킷에 넣습니다. 이렇게 하면 "route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 dev ens5" 명령을 실행하여 부팅 시 정적 경로를 생성할 수 있습니다.