%EC%9D%B4%20Linux%EC%97%90%EC%84%9C%20%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%20%EC%83%81%ED%83%9C%EA%B0%80%20%EB%B3%80%EA%B2%BD%EB%90%98%EC%97%88%EB%8B%A4%EB%8A%94%20%EC%9D%B4%EB%B2%A4%ED%8A%B8%EB%A5%BC%20%EC%88%98%EC%8B%A0%ED%95%98%EC%A7%80%20%EB%AA%BB%ED%95%98%EB%8F%84%EB%A1%9D%20%EB%B0%A9%EC%A7%80.png)
우리의 Wi-Fi 액세스 포인트는 10분이라는 매우 공격적인 DHCP 임대 시간으로 구성되어 있습니다. 임대가 갱신되어도 IP 주소는 동일하게 유지되므로 그 자체로는 문제가 되지 않습니다. 하지만 저는 VMware Workstation을 실행하고 있는데 이렇게 짧은 간격으로 인해 가상 머신 내부에서 네트워크 중단이 자주 발생합니다. 근본적인 문제는 vmet-natd 데몬에 있습니다. 일부 네트워크 이벤트가 있음을 감지하고 재연결이라고 가정합니다. 결과적으로 VM의 가상 네트워크 어댑터는 "물리적" 네트워크 연결이 끊어진 다음 즉시 다시 연결됩니다. 그리고 모든 TCP 세션이 VM에서 삭제됩니다.
현재 Xubuntu 18.04 호스트에서 VMware Workstation 15.1.0을 실행하고 있습니다.
이것이 발생할 때 syslog의 이벤트입니다.
Jun 25 15:23:18 laptop wpa_supplicant[1039]: wlp2s0: WPA: Group rekeying completed with 6c:3b:6b:XX:XX:XX [GTK=CCMP]
Jun 25 15:26:06 laptop dhclient[6554]: DHCPREQUEST of 192.168.XXX.XXX on wlp2s0 to 192.168.XXX.XXX port 67 (xid=0x6f72XXXX)
Jun 25 15:26:06 laptop dhclient[6554]: DHCPACK of 192.168.XX.XX from 192.168.XX.XX
Jun 25 15:26:06 laptop NetworkManager[1038]: <info> [1561465566.1687] dhcp4 (wlp2s0): address 192.168.XX.XX
Jun 25 15:26:06 laptop NetworkManager[1038]: <info> [1561465566.1687] dhcp4 (wlp2s0): plen 24 (255.255.255.0)
Jun 25 15:26:06 laptop NetworkManager[1038]: <info> [1561465566.1687] dhcp4 (wlp2s0): gateway 192.168.XX.XX
Jun 25 15:26:06 laptop vmnet-natd: RTM_NEWADDR: index:4, addr:192.168.XXX.XXX
Jun 25 15:26:06 laptop NetworkManager[1038]: <info> [1561465566.1688] dhcp4 (wlp2s0): lease time 600
Jun 25 15:26:06 laptop NetworkManager[1038]: <info> [1561465566.1688] dhcp4 (wlp2s0): nameserver '192.168.XXX.XXX'
Jun 25 15:26:06 laptop NetworkManager[1038]: <info> [1561465566.1688] dhcp4 (wlp2s0): nameserver 'XXX.XXX.XXX.XXX'
Jun 25 15:26:06 laptop NetworkManager[1038]: <info> [1561465566.1688] dhcp4 (wlp2s0): nameserver 'XXX.XXX.XXX.XXX'
Jun 25 15:26:06 laptop NetworkManager[1038]: <info> [1561465566.1688] dhcp4 (wlp2s0): state changed bound -> bound
Jun 25 15:26:06 laptop dbus-daemon[1020]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' requested by ':1.11' (uid=0 pid=1038 comm="/usr/sbin/NetworkManager --no-daemon " label="unconfined")
Jun 25 15:26:06 laptop systemd[1]: Starting Network Manager Script Dispatcher Service...
Jun 25 15:26:06 laptop dhclient[6554]: bound to 192.168.XXX.XXX -- renewal in 267 seconds.
Jun 25 15:26:06 laptop dbus-daemon[1020]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Jun 25 15:26:06 laptop systemd[1]: Started Network Manager Script Dispatcher Service.
Jun 25 15:26:06 laptop nm-dispatcher: req:1 'dhcp4-change' [wlp2s0]: new request (1 scripts)
Jun 25 15:26:06 laptop nm-dispatcher: req:1 'dhcp4-change' [wlp2s0]: start running ordered scripts...
Jun 25 15:26:06 laptop kernel: [10747.491441] userif-2: sent link down event.
Jun 25 15:26:06 laptop kernel: [10747.491445] userif-2: sent link up event.
이있다vmware 포럼의 스레드이에 대해서는 해결책이 없습니다.
이를 방지하려면 어떻게 해야 합니까? 내 google-fu는 해결책을 찾기에 충분하지 않았습니다.
이 문제를 해결하는 방법에는 여러 가지가 있을 수 있습니다.
- 이러한 이벤트에 대해 특별한 처리를 수행하도록 vmnet-natd를 수정합니다. (VMware 지원은 도움이 되지 않습니다.)
- 네트워크 이벤트를 완전히 무시하도록 vmnet-natd를 구성하지만 그러한 옵션은 없는 것 같습니다.
- 커널/사용자 공간 Linux 네트워크 스택을 패치/구성하여 Wi-Fi 연결 키 재지정 또는 DHCP 임대 연장 시 변경된 사항이 없는 경우 네트워크 변경 이벤트를 생성하지 마세요.
- 네트워크 이벤트(또는 그 일부 하위 집합)를 vmnet-natd로 보내지 않도록 커널/사용자 공간 Linux 네트워크 스택을 패치/구성합니다.
누군가 이 성가심을 해결하기 위해 저항이 가장 적은 길을 알려줄 수 있습니까?
업데이트 1:VM의 네트워크 어댑터는 NAT 모드로 구성되어 있으며 VM을 사무실 네트워크에 직접 노출할 수 없으므로 다른 모드에서는 실행할 수 없습니다. 호스트용 DHCP 서버는 액세스 포인트 자체이며 항상 동일하게 유지됩니다. 네트워크는 Network Manager를 통해 관리됩니다.
답변1
기사 DHCP 주소를 사용할 때 Linux에서 VMWare Player 수정 문제를 설명하고 해결책을 제시합니다.
VMwarePlayer v8+에서 발생한 이 문제는 다음과 같이 설명됩니다.
호스트 시스템의 네트워크 어댑터 중 하나의 DHCP 주소가 갱신될 때마다 모든 가상 시스템은 네트워크 연결 끊김 및 연결을 수신하여 갱신할 때마다 약 20초 동안 네트워크를 사용할 수 없게 됩니다.
이는 DHCP 임대 시간이 짧은 네트워크(예: 대략 5분마다 모든 VM이 잠시 동안 네트워크 연결이 끊어지는 네트워크)에 특히 파괴적입니다.
이 동작은 다음에서 명확하게 볼 수 있습니다 /var/log/messages
.
Jun 25 15:26:06 laptop kernel: [10747.491441] userif-2: sent link down event.
Jun 25 15:26:06 laptop kernel: [10747.491445] userif-2: sent link up event.
기사 작성자는 모든 VMWarePlayer 설치에 포함된 파일의 code-tar에 포함된 문자열을 userif-3
파일에서 발견했습니다.userif.c
/usr/lib/vmware/modules/source/vmnet-only.tar
그가 찾은 코드는 다음과 같습니다.
965 int
966 VNetUserIfSetUplinkState(VNetPort *port, uint8 linkUp)
967 {
...
1010 LOG(0, (KERN_NOTICE "userif-%d: sent link %s event.\n",
1011 userIf->port.id, linkUp ? "up" : "down"));
1012
1013 return retval;
1014 }
그런 다음 패치 파일을 만들고 다음과 같이 코드를 적용했습니다.
cd /tmp
tar xf /usr/lib/vmware/modules/source/vmnet.tar
patch -p0 < vmware-vmnet-only.patch
tar cf vmnet.tar vmnet-only
cp /tmp/vmnet.tar /usr/lib/vmware/modules/source/vmnet.tar
/usr/bin/vmware-modconfig --console --install-all
systemctl restart vmware ## or 'service vmware restart'
나는 그의 패치를 아래에 나열합니다:
-- vmnet-only/userif.c 2017-12-21 17:02:28.555820933 +0100
+++ vmnet-only.jjk/userif.c 2017-12-15 13:22:13.257724953 +0100
@@ -973,6 +973,9 @@
userIf = (VNetUserIF *)port->jack.private;
hubJack = port->jack.peer;
+ /* never send link down events */
+ if (!linkUp) return 0;
+
if (port->jack.state == FALSE || hubJack == NULL) {
return -EINVAL;
}