OS를 다시 시작하고 네트워크 연결을 끊지 않고 네트워크 인터페이스를 변경할 수 있는 방법이 있습니까?

OS를 다시 시작하고 네트워크 연결을 끊지 않고 네트워크 인터페이스를 변경할 수 있는 방법이 있습니까?

내가 아는 한, 재부팅하지 않고 espn0을 eth0으로 변경하려면 스크립트를 사용하여 다음을 수행할 수 있습니다.

#!/bin/bash
ip link set espn0 down
ip link set espn0 name eth0
ip link set eth0 up

일반 데스크탑에서 완벽하게 작동합니다. 하지만 ssh위 스크립트를 실행할 때만 액세스할 수 있는 서버의 경우,

첫 번째 진술부터 시작하면 다음과 같습니다. ip link set espn0 down

이로 인해 서버의 인터넷 연결이 끊어지고 SSH 로그인에 대한 연결이 끊어졌습니다.

그렇다면 특히 여전히 SSH를 통해 연결되어 있는 경우 재부팅하지 않고 인터넷 연결을 끊지 않고 espn0 인터페이스를 eth0으로 변경하려면 어떻게 해야 합니까? 가능합니까?

답변1

주소가 192.0.2.2/24이고 게이트웨이가 192.0.2.1인 시스템에서 문제가 발생합니다(액세스할 수 없게 되지 않는 경우).

# ip route
default via 192.0.2.1 dev espn0 
192.0.2.0/24 dev espn0 proto kernel scope link src 192.0.2.2 

# ip link set espn0 down
# ip link set espn0 name eth0
# ip link set eth0 up

# ip route
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2 

LAN 경로는 라우팅될 때 커널에 의해 주소에서 자동으로 다시 추가되지만 proto kernel기본 라우팅에 대한 메커니즘은 없습니다. 기본 경로가 없으면 연결이 끊어집니다.

거의 사용하지 않는 기능을 사용하는 것이 좋습니다ip route: ip route save/ ip route restore:

ip route save
라우팅 테이블 정보를 stdout에 저장

이 명령은 출력이 ip Route Restore로 전달하기에 적합한 원시 데이터라는 점을 제외하면 ip Route show와 유사하게 작동합니다.

그리고:

ip route restore
stdin에서 라우팅 테이블 정보 복원

이 명령은 ip Route save에서 반환된 데이터 스트림을 읽을 것으로 예상합니다. 라우팅 테이블 정보를 저장 당시의 상태로 정확하게 복원하려고 시도하므로 스트림의 정보(예: 장치 인덱스) 변환이 먼저 완료되어야 합니다. 기존 경로는 변경되지 않습니다. 테이블에 이미 존재하는 흐름에 지정된 경로는 무시됩니다.

이는 인터페이스 이름이 아닌 인터페이스 인덱스를 사용하여 내부 라우팅이 처리되고 여기에 저장되기 때문에 여기에서 작동합니다. 인터페이스 이름을 바꿔도 해당 색인은 변경되지 않습니다.

스크립트 사용:

ip route save default > /tmp/mysaveddefaultroute
ip link set espn0 down
ip link set espn0 name eth0
ip link set eth0 up
ip route restore < /tmp/mysaveddefaultroute

마침내:

# ip route
default via 192.0.2.1 dev eth0 
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2 

지침:

  • 확인할 방화벽 관련 규칙
  • 스크립트가 아무 것도 출력하면 출력할 수 없는 상태가 될 수 있습니다. 그런 다음 백그라운드에서 스크립트를 실행해야 합니다.
  • 시스템에 처리해야 할 다른 경로가 있을 수 있습니다. 적응하다
  • DHCP를 사용 중일 수 있습니다. DHCP를 사용하는 경우 DHCP를 재구성하지 않으면 제대로 작동하지 않습니다. 예를 들어 특정 DHCP 이벤트가 발생하면 갑자기 액세스할 수 없게 됩니다.

답변2

nohup을 통해 스크립트를 실행하고 백그라운드에 놓아 연결이 끊어지면 스크립트가 계속 실행되도록 할 수도 있습니다.

예를 들어 nohup ./myscript &

관련 정보