如何在没有公网IP时,实现远程连接SQL数据库,只有ADSL动态分配的IP

时间:2022-01-06 09:03:56
我们的服务器没有进行托管也没有公网的IP,只有电信动态分配的IP;
目前我们使用花生壳解析从外面可以访问我们的服务器,现在需要做一个客户端WIN程序,怎样连接我们服务器的SQL数据库。

希望各位高手不吝辞教!

31 个解决方案

#1


没有人知道了吗?

#2


直接用花生壳提供的地址阿,比如xxx.vicp.net,这样放到连接串中就可以了

#3


乖,这能实现吗?
强烈关注

#4


没有公网IP是不行的。

#5


如果没有公网IP,那就在网关映射一个端口到1433吧

#6


这样也可以??

#7


To:timiil(小华)
能不能说明白点

#8


1、数据库服务器直接使用公网IP(包括映射),客户端编程语言支持使用域名,在连接串中直接使用xxx.vicp.net。
2、数据库服务器直接使用公网IP(包括映射),客户端编程语言不支持直接使用xxx.vicp.net域名,只支持使用IP:在客户端先使用ping xxx.vicp.net得到服务器IP地址(可做成批处理,使用快捷方式,双击即可得到IP地址,对客户端复杂度增加不大),将IP地址填入客户端win程序,连接串使用填入的IP地址。
3、数据库服务器不直接使用公网IP(使用内网IP,无映射),可安装VPN服务器(使用公网IP和内网IP,花生壳客户端装此,win2000s单、双网卡都可,w2003s好象必须双网卡),VPN服务器与数据库服务器在同一局域网段,客户端选使用虚拟拨号连接(使用xxx.vicp.net)连接至VPN服务器,一旦连上,客户端与数据库服务器在逻辑上即在同一局域网段,客户端win程序可直接使用数据库服务器的内网IP连接SQL。
第三种方式安全程度最高,使用w2000server做VPN服务器,配置好后,VPN服务器在公网IP上将只有1723端口打开,病毒与黑客极难侵入,成本也不高,VPN服务器与客户端VPN连接配置网上详细介绍有大把。

#9


用花生壳提供的地址是可以访问服务器,但是直接连接数据库是不行的。

#10


TO:hzy_dl(爱好) 
照你的说法就是没有公网IP必须用VPN?可是我这里不适合用VPN就真的没有别的办法了?

#11


好象端口映谢,好象可以

#12


????
不可以做成Web Service吗?这样可以访问数据库了!

#13


你的客户端win程序对IP的要求是怎样的?自己输入IP地址或域名?

#14


不用VPN,随便找个Port Tunnel就行了

#15


ADSL现在给我动态分配了一个IP是:221.226.199.65;可是这个是连不上的,我们还有一个路由器内网IP是192.168.0.1,现在我要访问192.168.0.3机器(服务器)上的数据库。
怎么实现?分不是问题,希望大家多提想法,分不够另开帖。

#16


如果是路由器拨号上网,而路由器有DMZ功能,在路由器里将DMZ主机设置192.168.0.3,win客户端可直接使用221.226.199.65连接上数据库。

#17


如果使用端口映射,映射范围比较大,可能需要映射从1025-10000端口,没有使用过端口映射软件,我看到的几个映射软件不能将指范围,只能逐一指定单个端口号。

#18


路由器如有端口映射功能,且可指定触发端口,可将1433映射到192.168.0.3,触发范围设置1025-10000或更大,win客户端可直接使用221.226.199.65连接上数据库。没有试过,理论上可行。

#19


支持花生壳!

#20


你可以这样,当这个客户端启动的时候调用一个bat文件,在bat文件中用dos来ping你的花生壳的域名,然后获得的ip写入一个文本,然后进行分析,把ip读出来写入你的软件中

#21


有路由器就在路由器上设置虚拟服务器做端口映射,从电脑拨的就用Port Tunnel做端口映射,然后在数据库服务器上起一个花生壳,客户端就可以通过花生壳地址直接访问数据库了

#22


TO:hzy_dl(爱好)
我以前不知道设置路由器,现在是可以了;
不过我还有一个问题就是,比如说现在的IP是221.226.199.65,但是明天可能变成了221.226.199.1
但是我们在Web里面用花生壳是可以访问网站(lk.2mydns.com),这里不能写成Data Source=lk.2mydns.com,1433;Network Library=DBMSSOCN;Initial Catalog=DB;User ID=sa;Password=;
只能写Data Source=221.226.199.65,1433;Network Library=DBMSSOCN;Initial Catalog=DB;User ID=sa;Password=;


就是你上面写的:
只支持使用IP:在客户端先使用ping xxx.vicp.net得到服务器IP地址(可做成批处理,使用快捷方式,双击即可得到IP地址,对客户端复杂度增加不大),将IP地址填入客户端win程序,连接串使用填入的IP地址。
程序中怎么实现?

#23


TO:sj_breezerain(breeze-rain)
能否把你如何根据网址得到IP地址的详细过程说一下,或者给点代码

#24


具体代码我没有,我只是有这个想法,然后我问了我同事,他曾经做过类似的东西,他说可以的.
我想你利用dos的ping命令是可以得到当前ip的.然后把出现在dos窗口的那些字符全部写入一个文本文件:
Pinging www.online.sh.cn [218.1.64.33] with 32 bytes of data:

Reply from 218.1.64.33: bytes=32 time=16ms TTL=248
Reply from 218.1.64.33: bytes=32 time<10ms TTL=248
Reply from 218.1.64.33: bytes=32 time<10ms TTL=248
Reply from 218.1.64.33: bytes=32 time=15ms TTL=248

Ping statistics for 218.1.64.33:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  16ms, Average =  7ms

你要的就是这个:218.1.64.33
不好意思我只是初学的,能不能帮到你我就不清楚了!:(

#25


如果使用C#做客户端,它可以自己使用DNS解析得到IP地址。
string IPstring;
string HostName="xxx.vicp.net";
System.Net .IPAddress IP;
System.Net .IPHostEntry IPEntry;
IPEntry=System.Net .Dns.Resolve(HostName);
IP=IPEntry.AddressList [0];
IPstring=IP.ToString ();
连接串="Data Source="+IPstring+",1433;Network Library=DBMSSOCN;Initial Catalog=DB;User ID=sa;Password=";

如果客户端语言不支持DNS解析,通过操作员手工运行批处理(即Ping命令),看到IP地址,然后在程序的登录窗口设置一服务器IP地址文本框,操作员手工将看到的IP地址填入,连接串再使用手工填入的IP地址,当然应当也可象sj_breezerain(breeze-rain)所说,程序调用批处理Ping,批处理结果进入另一文件,程序再分析此文件得到IP,好象比较复杂。

#26


TO:sj_breezerain(breeze-rain) 
非常感激你,你说的这个我知道,能不能问你同事讲点具体实现啊。

#27


UP

#28


还有一种方法,服务器需直接拨号上网(通过路由器没有处理过),编一程序运行于服务器,得到自己的公网IP,将IP发送一邮箱,客户端从邮箱取得服务器当前IP地址。

#29


up

#30


必须保证sql服务器启动之前服务器已经连接到internet,不然是连不上的

#31


当formload时调用外部的程序,在delphi中是exec(*.bat),在c#中不太清楚,在bat文件中有ping 你的域名>>*.txt,你应该读取Pinging www.online.sh.cn [218.1.64.33] with 32 bytes of data:这一行.然后用split得到218.1.64.33] with 32 bytes of data:,再用split得到218.1.64.33.这是我同事说得,你看看吧!

#1


没有人知道了吗?

#2


直接用花生壳提供的地址阿,比如xxx.vicp.net,这样放到连接串中就可以了

#3


乖,这能实现吗?
强烈关注

#4


没有公网IP是不行的。

#5


如果没有公网IP,那就在网关映射一个端口到1433吧

#6


这样也可以??

#7


To:timiil(小华)
能不能说明白点

#8


1、数据库服务器直接使用公网IP(包括映射),客户端编程语言支持使用域名,在连接串中直接使用xxx.vicp.net。
2、数据库服务器直接使用公网IP(包括映射),客户端编程语言不支持直接使用xxx.vicp.net域名,只支持使用IP:在客户端先使用ping xxx.vicp.net得到服务器IP地址(可做成批处理,使用快捷方式,双击即可得到IP地址,对客户端复杂度增加不大),将IP地址填入客户端win程序,连接串使用填入的IP地址。
3、数据库服务器不直接使用公网IP(使用内网IP,无映射),可安装VPN服务器(使用公网IP和内网IP,花生壳客户端装此,win2000s单、双网卡都可,w2003s好象必须双网卡),VPN服务器与数据库服务器在同一局域网段,客户端选使用虚拟拨号连接(使用xxx.vicp.net)连接至VPN服务器,一旦连上,客户端与数据库服务器在逻辑上即在同一局域网段,客户端win程序可直接使用数据库服务器的内网IP连接SQL。
第三种方式安全程度最高,使用w2000server做VPN服务器,配置好后,VPN服务器在公网IP上将只有1723端口打开,病毒与黑客极难侵入,成本也不高,VPN服务器与客户端VPN连接配置网上详细介绍有大把。

#9


用花生壳提供的地址是可以访问服务器,但是直接连接数据库是不行的。

#10


TO:hzy_dl(爱好) 
照你的说法就是没有公网IP必须用VPN?可是我这里不适合用VPN就真的没有别的办法了?

#11


好象端口映谢,好象可以

#12


????
不可以做成Web Service吗?这样可以访问数据库了!

#13


你的客户端win程序对IP的要求是怎样的?自己输入IP地址或域名?

#14


不用VPN,随便找个Port Tunnel就行了

#15


ADSL现在给我动态分配了一个IP是:221.226.199.65;可是这个是连不上的,我们还有一个路由器内网IP是192.168.0.1,现在我要访问192.168.0.3机器(服务器)上的数据库。
怎么实现?分不是问题,希望大家多提想法,分不够另开帖。

#16


如果是路由器拨号上网,而路由器有DMZ功能,在路由器里将DMZ主机设置192.168.0.3,win客户端可直接使用221.226.199.65连接上数据库。

#17


如果使用端口映射,映射范围比较大,可能需要映射从1025-10000端口,没有使用过端口映射软件,我看到的几个映射软件不能将指范围,只能逐一指定单个端口号。

#18


路由器如有端口映射功能,且可指定触发端口,可将1433映射到192.168.0.3,触发范围设置1025-10000或更大,win客户端可直接使用221.226.199.65连接上数据库。没有试过,理论上可行。

#19


支持花生壳!

#20


你可以这样,当这个客户端启动的时候调用一个bat文件,在bat文件中用dos来ping你的花生壳的域名,然后获得的ip写入一个文本,然后进行分析,把ip读出来写入你的软件中

#21


有路由器就在路由器上设置虚拟服务器做端口映射,从电脑拨的就用Port Tunnel做端口映射,然后在数据库服务器上起一个花生壳,客户端就可以通过花生壳地址直接访问数据库了

#22


TO:hzy_dl(爱好)
我以前不知道设置路由器,现在是可以了;
不过我还有一个问题就是,比如说现在的IP是221.226.199.65,但是明天可能变成了221.226.199.1
但是我们在Web里面用花生壳是可以访问网站(lk.2mydns.com),这里不能写成Data Source=lk.2mydns.com,1433;Network Library=DBMSSOCN;Initial Catalog=DB;User ID=sa;Password=;
只能写Data Source=221.226.199.65,1433;Network Library=DBMSSOCN;Initial Catalog=DB;User ID=sa;Password=;


就是你上面写的:
只支持使用IP:在客户端先使用ping xxx.vicp.net得到服务器IP地址(可做成批处理,使用快捷方式,双击即可得到IP地址,对客户端复杂度增加不大),将IP地址填入客户端win程序,连接串使用填入的IP地址。
程序中怎么实现?

#23


TO:sj_breezerain(breeze-rain)
能否把你如何根据网址得到IP地址的详细过程说一下,或者给点代码

#24


具体代码我没有,我只是有这个想法,然后我问了我同事,他曾经做过类似的东西,他说可以的.
我想你利用dos的ping命令是可以得到当前ip的.然后把出现在dos窗口的那些字符全部写入一个文本文件:
Pinging www.online.sh.cn [218.1.64.33] with 32 bytes of data:

Reply from 218.1.64.33: bytes=32 time=16ms TTL=248
Reply from 218.1.64.33: bytes=32 time<10ms TTL=248
Reply from 218.1.64.33: bytes=32 time<10ms TTL=248
Reply from 218.1.64.33: bytes=32 time=15ms TTL=248

Ping statistics for 218.1.64.33:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  16ms, Average =  7ms

你要的就是这个:218.1.64.33
不好意思我只是初学的,能不能帮到你我就不清楚了!:(

#25


如果使用C#做客户端,它可以自己使用DNS解析得到IP地址。
string IPstring;
string HostName="xxx.vicp.net";
System.Net .IPAddress IP;
System.Net .IPHostEntry IPEntry;
IPEntry=System.Net .Dns.Resolve(HostName);
IP=IPEntry.AddressList [0];
IPstring=IP.ToString ();
连接串="Data Source="+IPstring+",1433;Network Library=DBMSSOCN;Initial Catalog=DB;User ID=sa;Password=";

如果客户端语言不支持DNS解析,通过操作员手工运行批处理(即Ping命令),看到IP地址,然后在程序的登录窗口设置一服务器IP地址文本框,操作员手工将看到的IP地址填入,连接串再使用手工填入的IP地址,当然应当也可象sj_breezerain(breeze-rain)所说,程序调用批处理Ping,批处理结果进入另一文件,程序再分析此文件得到IP,好象比较复杂。

#26


TO:sj_breezerain(breeze-rain) 
非常感激你,你说的这个我知道,能不能问你同事讲点具体实现啊。

#27


UP

#28


还有一种方法,服务器需直接拨号上网(通过路由器没有处理过),编一程序运行于服务器,得到自己的公网IP,将IP发送一邮箱,客户端从邮箱取得服务器当前IP地址。

#29


up

#30


必须保证sql服务器启动之前服务器已经连接到internet,不然是连不上的

#31


当formload时调用外部的程序,在delphi中是exec(*.bat),在c#中不太清楚,在bat文件中有ping 你的域名>>*.txt,你应该读取Pinging www.online.sh.cn [218.1.64.33] with 32 bytes of data:这一行.然后用split得到218.1.64.33] with 32 bytes of data:,再用split得到218.1.64.33.这是我同事说得,你看看吧!