歡迎您光臨本站 註冊首頁

Openvpn client自動斷網的問題

←手機掃碼閱讀     火星人 @ 2014-03-05 , reply:0

Openvpn client自動斷網的問題

我在winxp上安裝兩套openvpn client,它們分別有不同的註冊表鍵值,安裝目錄,不同的tap網卡(網卡的硬體ID也不同),連接不同的server端。openvpn client 1連接server 1后得到10.8.0.x的IP,client 2連接server 2后得到10.7.0.x的IP。
現在的問題是,兩個client同時連接各自的server后,斷開其中任意一個client以後,另一個client也會自動斷開。
以下的日誌是在斷開client 1后,client 2上的日誌,我把日誌級別調到9。


Tue Nov 07 09:11:54 2006 us=13161  event_wait returned 0
Tue Nov 07 09:11:54 2006 us=13195 I/O WAIT status=0x0020
Tue Nov 07 09:11:54 2006 us=13232 WE_CTL n=0 ev=0x00469984 rwflags=0x0001 arg=0x00453560
Tue Nov 07 09:11:54 2006 us=13249 STREAM: SET NEXT, buf= next= len=-1 maxlen=1528
Tue Nov 07 09:11:54 2006 us=13263 WE_CTL n=1 ev=0x00b75bbc rwflags=0x0001 arg=0x00453558
Tue Nov 07 09:11:54 2006 us=13276 WE_CTL n=2 ev=0x00ba6f40 rwflags=0x0001 arg=0x0045355c
Tue Nov 07 09:11:54 2006 us=13294 I/O WAIT TRQ|Tw0|SRQ|Sw1
Tue Nov 07 09:11:54 2006 us=13306 WE_WAIT enter n=3 to=1149
Tue Nov 07 09:11:54 2006 us=13319 ev=0x00000758 rwflags=0x0001 arg=0x00453560
Tue Nov 07 09:11:54 2006 us=13331 ev=0x00000760 rwflags=0x0001 arg=0x00453558
Tue Nov 07 09:11:54 2006 us=13343 ev=0x00000744 rwflags=0x0001 arg=0x0045355c
Tue Nov 07 09:11:54 2006 us=18909 WE_WAIT leave rwflags=0x0001 arg=0x00453560
Tue Nov 07 09:11:54 2006 us=18928  event_wait returned 1
Tue Nov 07 09:11:54 2006 us=20811 I/O WAIT status=0x0010
Tue Nov 07 09:11:54 2006 us=20848 PID packet_id_free
Tue Nov 07 09:11:54 2006 us=20904 SSL alert (write): warning: close notify
Tue Nov 07 09:11:54 2006 us=21080 PID packet_id_free
Tue Nov 07 09:11:54 2006 us=21092 PID packet_id_free
Tue Nov 07 09:11:54 2006 us=21102 PID packet_id_free
Tue Nov 07 09:11:54 2006 us=21132 PID packet_id_free
Tue Nov 07 09:11:54 2006 us=21143 PID packet_id_free
Tue Nov 07 09:11:54 2006 us=21153 PID packet_id_free
Tue Nov 07 09:11:54 2006 us=21163 PID packet_id_free
(我覺得問題出在下面的日誌里,不知道為什麼client 2的tcp連接被斷開)
Tue Nov 07 09:11:54 2006 us=21259 TCP/UDP: Closing socket
Tue Nov 07 09:11:54 2006 us=21666 route DELETE 10.7.0.1 MASK 255.255.255.255 10.7.0.10
Tue Nov 07 09:11:54 2006 us=159550 DEBUG: route find if: on_tun=1 count=1 index=131077
Tue Nov 07 09:11:54 2006 us=165278 Route deletion via IPAPI succeeded
Tue Nov 07 09:11:54 2006 us=165309 Closing TUN/TAP interface
Tue Nov 07 09:11:54 2006 us=165322 Attempting CancelIO on TAP-Win32 adapter
Tue Nov 07 09:11:54 2006 us=176769 Attempting close of overlapped read event on TAP-Win32 adapter
Tue Nov 07 09:11:54 2006 us=176805 Attempting close of overlapped write event on TAP-Win32 adapter
Tue Nov 07 09:11:54 2006 us=176822 Attempting CloseHandle on TAP-Win32 adapter
Tue Nov 07 09:11:54 2006 us=177747 client_down.bat Local Link 17 1500 1528 10.7.0.9 10.7.0.10 init
Tue Nov 07 09:11:54 2006 us=178498 SYSTEM 'client_down.bat Local Link 17 1500 1528 10.7.0.9 10.7.0.10 init'
Tue Nov 07 09:11:54 2006 us=178515 ENV 'script_type=down'
Tue Nov 07 09:11:54 2006 us=178526 ENV 'dev=Local Link 17'
Tue Nov 07 09:11:54 2006 us=178536 ENV 'link_mtu=1528'
Tue Nov 07 09:11:54 2006 us=178546 ENV 'tun_mtu=1500'
Tue Nov 07 09:11:54 2006 us=178556 ENV 'script_context=init'
Tue Nov 07 09:11:54 2006 us=178567 ENV 'signal=sigterm'
Tue Nov 07 09:11:54 2006 us=178577 ENV 'route_gateway_1=10.7.0.10'
Tue Nov 07 09:11:54 2006 us=178587 ENV 'route_netmask_1=255.255.255.255'
Tue Nov 07 09:11:54 2006 us=178598 ENV 'route_network_1=10.7.0.1'
Tue Nov 07 09:11:54 2006 us=178608 ENV 'route_vpn_gateway=10.7.0.10'
Tue Nov 07 09:11:54 2006 us=178619 ENV 'route_net_gateway=192.168.70.1'
Tue Nov 07 09:11:54 2006 us=178629 ENV 'ifconfig_remote=10.7.0.10'
Tue Nov 07 09:11:54 2006 us=178640 ENV 'ifconfig_local=10.7.0.9'
Tue Nov 07 09:11:54 2006 us=178650 ENV 'common_name=SERVER'
Tue Nov 07 09:11:54 2006 us=178661 ENV 'trusted_port=58194'
Tue Nov 07 09:11:54 2006 us=178671 ENV 'trusted_ip=123.123.123.123'
Tue Nov 07 09:11:54 2006 us=178682 ENV 'untrusted_port=58194'
Tue Nov 07 09:11:54 2006 us=178692 ENV 'untrusted_ip=123.123.123.123'
Tue Nov 07 09:11:54 2006 us=178703 ENV 'tls_serial_0=1'
Tue Nov 07 09:11:54 2006 us=178714 ENV 'tls_id_0=/C=KG/ST=NA/O=OpenVPN-TEST/CN=SERVER/emailAddress=me@myhost.mydomain'
Tue Nov 07 09:11:54 2006 us=178725 ENV 'tls_serial_1=0'
Tue Nov 07 09:11:54 2006 us=178736 ENV 'tls_id_1=/C=KG/ST=NA/L=BISHKEK/O=OpenVPN-TEST/CN=CA/emailAddress=me@myhost.mydomain'
Tue Nov 07 09:11:54 2006 us=178747 ENV 'config=client.ovpn'
Tue Nov 07 09:11:54 2006 us=178758 ENV 'proto=tcp-client'
Tue Nov 07 09:11:54 2006 us=178768 ENV 'local_port=1194'
Tue Nov 07 09:11:54 2006 us=178778 ENV 'verb=9'
Tue Nov 07 09:11:54 2006 us=178788 ENV 'daemon=0'
Tue Nov 07 09:11:54 2006 us=178799 ENV 'daemon_log_redirect=0'
Tue Nov 07 09:11:54 2006 us=178810 ENV 'remote_1=123.123.123.123'
Tue Nov 07 09:11:54 2006 us=178822 ENV 'remote_port_1=58194'
C:\Program Files\openvpn-2\config>route delete 10.7.0.0
The route specified was not found.
Tue Nov 07 09:11:54 2006 us=419276 SYSTEM return=0
Tue Nov 07 09:11:54 2006 us=420524 PID packet_id_free
Tue Nov 07 09:11:54 2006 us=420580 SIGTERM received, process exiting
Tue Nov 07 09:11:54 2006 us=421278 Closing Win32 semaphore 'openvpn_netcmd'


[ 本帖最後由 sailer_sh 於 2006-11-7 09:51 編輯 ]
《解決方案》

建議先安裝一個VPN程序,使用2套配置文件,創建2個tap設備

分別連接2個vpn server試試,我印象中A掉了,是不會 影響B的。
《解決方案》

最新發現:兩套openvpn client,一個使用命令行方式連接(bin\openvpn.exe --config ..\config\client.ovpn),另一個使用openvpn-gui連接,那麼,斷開其中任意一個,另一個不會斷開。
如果兩個都使用命令行方式連接,斷開其中任意一個,另一個也不會斷開。

看來問題出在openvpn-gui上,正在看openvpn-gui-1.0.3的代碼,我不熟悉窗口編程,所以看得很吃力。


在openvpn-gui的代碼目錄里,有一個openvpn.c文件,裡面有int StartOpenVPN(int config)、void StopOpenVPN(int config)、void SuspendOpenVPN(int config)、void StopAllOpenVPN()等幾個函數,感覺上是用來操作openvpn客戶端的。

在main.c里有一個函數,DispatchMessage()好像是windows消息機制相關的函數,我不懂這個,不知道誰能解釋一下:

/*  This function is called by the Windows function DispatchMessage()  */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  static UINT s_uTaskbarRestart;
  int i;

  switch (message) {
    case WM_CREATE:      

      /* Save Window Handle */
      o.hWnd = hwnd;

      s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));

      CreatePopupMenus();        /* Create popup menus */  
      LoadAppIcon();                /* Load App Icon */
      ShowTrayIcon();
      if (o.allow_service=='1' || o.service_only=='1')
        CheckServiceStatus();        // Check if service is running or not
      if (!AutoStartConnections()) {
        SendMessage(hwnd, WM_CLOSE, 0, 0);
        break;
      }
      break;
           
    case WM_NOTIFYICONTRAY:
      OnNotifyTray(lParam);         // Manages message from tray
      return TRUE;
                 
    case WM_COMMAND:
      if ( (LOWORD(wParam) >= IDM_CONNECTMENU) && (LOWORD(wParam) < IDM_CONNECTMENU + MAX_CONFIGS) ) {
        StartOpenVPN(LOWORD(wParam) - IDM_CONNECTMENU);
      }
      if ( (LOWORD(wParam) >= IDM_DISCONNECTMENU) && (LOWORD(wParam) < IDM_DISCONNECTMENU + MAX_CONFIGS) ) {
        StopOpenVPN(LOWORD(wParam) - IDM_DISCONNECTMENU);
      }
      if ( (LOWORD(wParam) >= IDM_STATUSMENU) && (LOWORD(wParam) < IDM_STATUSMENU + MAX_CONFIGS) ) {
        ShowWindow(o.cnn.hwndStatus, SW_SHOW);
      }
      if ( (LOWORD(wParam) >= IDM_VIEWLOGMENU) && (LOWORD(wParam) < IDM_VIEWLOGMENU + MAX_CONFIGS) ) {
        ViewLog(LOWORD(wParam) - IDM_VIEWLOGMENU);
      }
      if ( (LOWORD(wParam) >= IDM_EDITMENU) && (LOWORD(wParam) < IDM_EDITMENU + MAX_CONFIGS) ) {
        EditConfig(LOWORD(wParam) - IDM_EDITMENU);
      }
#ifndef DISABLE_CHANGE_PASSWORD
      if ( (LOWORD(wParam) >= IDM_PASSPHRASEMENU) && (LOWORD(wParam) < IDM_PASSPHRASEMENU + MAX_CONFIGS) ) {
        ShowChangePassphraseDialog(LOWORD(wParam) - IDM_PASSPHRASEMENU);
      }
#endif
      if (LOWORD(wParam) == IDM_PROXY) {
        ShowProxySettingsDialog();
      }
      if (LOWORD(wParam) == IDM_ABOUT) {
        DialogBox(o.hInstance, (LPCTSTR)IDD_ABOUTDIALOG, NULL, (DLGPROC)AboutDialogFunc);
      }
      if (LOWORD(wParam) == IDM_CLOSE) {
        CloseApplication(hwnd);
      }
      if (LOWORD(wParam) == IDM_SERVICE_START) {
        MyStartService();
      }
      if (LOWORD(wParam) == IDM_SERVICE_STOP) {
        MyStopService();
      }     
      if (LOWORD(wParam) == IDM_SERVICE_RESTART) MyReStartService();
      break;
            
    case WM_CLOSE:
      CloseApplication(hwnd);
      break;

    case WM_DESTROY:
      StopAllOpenVPN();       
      OnDestroyTray();          /* Remove Tray Icon and destroy menus */
      PostQuitMessage (0);        /* Send a WM_QUIT to the message queue */
      break;

    case WM_QUERYENDSESSION:
      return(TRUE);

    case WM_ENDSESSION:
      StopAllOpenVPN();
      OnDestroyTray();
      break;

    case WM_POWERBROADCAST:
      switch (wParam) {
        case PBT_APMSUSPEND:
          if (o.disconnect_on_suspend == '1')
            {
              /* Suspend running connections */
              for (i=0; i<o.num_configs; i++)
                {
                  if (o.cnn.connect_status == CONNECTED)
                SuspendOpenVPN(i);
                }

              /* Wait for all connections to suspend */
              for (i=0; i<10; i++, Sleep(500))
                if (CountConnectedState(SUSPENDING) == 0) break;
            }
          return FALSE;

        case PBT_APMRESUMESUSPEND:
        case PBT_APMRESUMECRITICAL:
          for (i=0; i<o.num_configs; i++)
            {
              /* Restart suspend connections */
              if (o.cnn.connect_status == SUSPENDED)
                StartOpenVPN(i);

              /* If some connection never reached SUSPENDED state */
              if (o.cnn.connect_status == SUSPENDING)
                StopOpenVPN(i);
            }
          return FALSE;
      }

    default:                        /* for messages that we don't deal with */
      if (message == s_uTaskbarRestart)
        {
          /* Explorer has restarted, re-register the tray icon. */
          ShowTrayIcon();
          CheckAndSetTrayIcon();
          break;
        }      
      return DefWindowProc (hwnd, message, wParam, lParam);
  }

  return 0;
}


[ 本帖最後由 sailer_sh 於 2006-11-8 17:30 編輯 ]

[火星人 ] Openvpn client自動斷網的問題已經有435次圍觀

http://coctec.com/docs/service/show-post-44404.html