首页
社区
课程
招聘
[求助]同时连接多个VPN失败
发表于: 2014-5-23 15:49 15863

[求助]同时连接多个VPN失败

2014-5-23 15:49
15863
有多个VPN帐号,在一台机器上自动创建多个vpn拨号连接(设置不添加路由,确保vpn之间不会交叉联网),然后调用RasDial 连接VPN,结果只能同时连接成功4个VPN,另外2个调用失败,返回错误码800
错误代码(800):不能建立VPN连接。VPN服务器不能到达或者此连接的安全参数没有正确配置。

我怀疑是系统(xp sp3)有VPN连接数限制导致的,因为多个帐号我单独拨号都是可以连接成功的,另外这批帐号在另外一台电脑上,只能同时建立2个VPN连接,另外4个连接失败(800错误)

请教高人这个到底是啥问题?
如果是系统连接限制,该如何修改?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 126
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
补充一下,vpn是pptp类型的
2014-5-23 15:51
0
雪    币: 126
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
再补充下,开了虚拟机windows2003, 使用上面的帐号测试,可以同时连接上5个,再多一个就失败.
有点奇怪,不同系统同时连接成功的个数还不同...
2014-5-23 16:24
0
雪    币: 126
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
经过测试修改,800错误原因找到,是因为连接未设置服务器属性,多个连接后默认变成L2TP,结果返回800
经过修改连接属性800错误不见,但仍然多个VPN连接不能同时创建,返回错误633
创建VPN主要代码如下,还请指点下:

BOOL ConnectVpn()
{
        //VPN连接代码
        memset(&RasDialParams, 0, sizeof(RasDialParams));
        RasDialParams.dwSize = sizeof(RASDIALPARAMS);

        lstrcpy(RasDialParams.szEntryName, (LPCTSTR)sEntryName);
        lstrcpy(RasDialParams.szPhoneNumber, (LPCTSTR)sServerIp);
        lstrcpy(RasDialParams.szUserName, (LPCTSTR)sUserName);
        lstrcpy(RasDialParams.szPassword, (LPCTSTR)sPassword);
        lstrcpy(RasDialParams.szDomain, "");

        CreateRasEntry(RasDialParams.szEntryName, RasDialParams.szPhoneNumber,
                RasDialParams.szUserName, RasDialParams.szPassword);

        // Dial
        Ret = RasDial(NULL, NULL, &RasDialParams, 0, NULL/*&RasDialFunc*/, &m_hConnection)
        //...
}

BOOL CreateRasEntry(const char *pszEntryName, const char *pszServerName, const char *pszUserName,        const char *pszPassWord)
{
        RASENTRY rasEntry;
        DWORD dwResult;

        memset(&rasEntry, 0, sizeof(rasEntry));
        rasEntry.dwType = RASET_Vpn;
        rasEntry.dwSize = sizeof(rasEntry);
        //RASEO_RemoteDefaultGateway 添加默认路由选项
        rasEntry.dwfOptions = RASEO_RequireMsEncryptedPw | RASEO_RequireDataEncryption | RASEO_ModemLights | RASEO_ShowDialingProgress;
        lstrcpy(rasEntry.szLocalPhoneNumber, pszServerName);
        lstrcpy(rasEntry.szDeviceType, RASDT_Vpn);
        lstrcpy(rasEntry.szDeviceName, TEXT("RAS VPN Line 0"));

        rasEntry.dwFramingProtocol = RASFP_Ppp;       
        rasEntry.dwfNetProtocols = RASNP_Ip;
        rasEntry.dwVpnStrategy = VS_PptpOnly;        //设置pptp连接属性

        dwResult = RasSetEntryProperties(NULL, pszEntryName, &rasEntry, sizeof(rasEntry), NULL, 0);
        if (dwResult != 0)
        {
                TRACE("RasSetEntryProperties %s failed error=%d\n", pszEntryName, dwResult);
                return FALSE;
        }

        RASDIALPARAMS rdParams;
        ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));
        rdParams.dwSize = sizeof(RASDIALPARAMS);
        lstrcpy(rdParams.szEntryName, pszEntryName);
        lstrcpy(rdParams.szUserName, pszUserName);
        lstrcpy(rdParams.szPassword, pszPassWord);
        DWORD dwRet = RasSetEntryDialParams(NULL, &rdParams, FALSE);

        if(dwRet == 0)
                return TRUE;
        else
                return FALSE;
}
2014-5-23 17:35
0
雪    币: 126
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
网上找了一个下午,终于找到原因了,是系统本身有限制.
解决方法就是修改注册表,具体参考如下:
http://www.utt.com.cn/reference.php?id=989

:)
2014-5-23 19:21
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
工作室挂机必备啊
2014-5-23 20:00
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
lz 好人,学习了
2014-5-24 23:22
0
雪    币: 205
活跃值: (155)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学习了。楼主,如果同时设置了多条VPN,上网时,能否根据需要选择不同的VPN?
比如:程序1 连接时,用VPN1;程序2连接时用VPN2。。。?
2014-6-12 08:50
0
雪    币: 220
活跃值: (711)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持LZ这种解决问题后SHARE的精神
2014-6-13 06:16
0
雪    币: 205
活跃值: (155)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
请问楼主,当连接多条vpn后,程序能不能自己选择通过哪条vpn通信?比如:访问 10.100.1.1 这个ip,程序1走vpn1,程序2走vpn2,,。。。。
2014-6-13 16:18
0
雪    币: 126
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
可以在建立连接前进行hook拦截,比如LSP,在连接函数中添加指定路由即可.
不过有个缺陷,如果目标IP相同,通过添加路由方法没法解决.
2014-6-28 17:12
0
雪    币: 204
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
VMWare里建个虚拟机,在里面用vpn,可以很好解决这些问题,
它的原理是建立了一个虚拟网卡,在这个网卡上进行vpn拨号,
之后应用程序选取某个网卡进行传输数据,这样更灵活一些,试了几次,
没有成功,有人碰到过类似的问题没?
2014-7-24 13:05
0
游客
登录 | 注册 方可回帖
返回
//