不少人都有这样的想法:在动态获取的IP地址的网络里,搞一台电脑当服务器,但还要可以直接通过域名直接访问的。
这个要求实现起来难度确实比较高,但不是没有办法。有人专门提供这样的服务,比如花生壳,他们的市场应该还是很大的,不少路由器都内置了花生壳的客户端,可以方便不少需要有类似需求的人。
但是,使用他们服务大概是要花费人民币的(没用过,也没有仔细了解),对于习惯了free网络的我们(这里free是免费,不是GNU的自由!),连操作系统、办公软件、杀毒软件都清一色D版的free人士(恐怕我们大多数人都是这样的)
——要免费,把一毛不拔的精神发扬光大!
不过这里更多是要发扬DIY精神,自己打造!是一套由简单到复杂的网络环境下的花生壳方案详解。
废话少说,切入正题。
花生壳这样的工具-或者说服务-本质上就是自动通报本机IP地址到一台服务器上,由这台服务器把IP地址跟域名进行绑定,最终达到通过域名访问动态IP地址的功能。这里面的核心就是IP地址通报(再者才是服务器存储该IP地址,域名绑定,接受请求之类)。
原理及思路
服务器自动定期通报其IP地址给一台虚拟主机,虚拟主机根据请求获取服务器的IP地址,并作记录,使用域名访问虚拟主机上页面,由程序自动跳转到服务器IP地址上的页面。
自建花生壳必备工具
我们的工作重点就是搞出一套IP地址通报系统,让我们的主机主动的报告其IP地址。但IP地址报告给谁呢,当然要一台确定的主机,至少有固定的IP地址或域名。我们这里使用需要一台web服务器,虚拟主机就可以的,但要支持动态程序页面,如PHP,jsp,asp(.NET)之类。鉴于PHP是当前最流行的web程序,同时是free的GNU一员,我们这里以php为例。
一台运行windows的电脑,就是对外服务器,自然少不了的,软件配置在此不需多说了。(linux也可以,原理类似。)
要想让服务器定期主动向虚拟主机发请求,这里使用windows的计划任务实现。需要的一点是需要使用“任务计划”,相应的服务要记得打开。(如果是Linux服务器,可以使用cron等工具)
通报服务器IP地址,最简的就是使用基于字符界面浏览器,网上很多开源的,选择太多了,这里使用curl (官网http://curl.haxx.se/下载http://curl.haxx.se/download.html)。服务器根据浏览器发来的http请求,很容易得到客户端主机的IP地址。如果浏览器是局域网内部电脑上的,网页服务器获取的就是该局域网对外网关(一般是路由器)的对外IP地址。(注:本段所说的“浏览器”,对应于DIY花生壳而言,就是上上段所讲的对外的服务器)
我们先从最简单的网络环境说起详细架设方案。
服务器直接连在adsl猫上,使用服务器拨号上网。这种情况下,服务器拨号获取的ip地址是公网IP地址,直接使用该IP就可以连接服务器。
先在虚拟主机上创建合适的程序页面,以简单易记为佳,如www.path8.net/mypeanut/index.php (把www.path8.net替换为你的主机地址,下同),核心代码如下(完整代码请参看文后附件):
if(isset($_GET[‘optype’]) && $_GET[‘optype’]==’report’){
application(‘pnip’,$_SERVER[“REMOTE_ADDR”]);
echo(‘crm ip received: ‘.$_SERVER[‘REMOTE_ADDR’].”n<br>”);
echo(“crm server ip report successfull.”);
}elseif(isset($_GET[‘optype’]) && $_GET[‘optype’]==’clear’){
application(‘pnip’,”);
echo(“cleared”);
}else{
$pnip=application(‘pnip’);
header(“Content-type: text/html; charset=gb2312”);
echo(“http://”.$pnip.”/nn<br><br><a href=”http://”.$pnip.”/”>猛点这里进入</a>”);
}
这段代码整合一IP通报功能,及显示DIY花生壳链接入口(服务器正确的公网IP地址)的功能。IP通报就是http请求www.path8.net/mypeanut/index.php?optype=report
www.path8.net/mypeanut/index.php就是通过DIY花生壳获取服务器入口。如果需要,也可以改成直接服务器端跳转的形式,使用会更方便。(注:这里也没有身份验证,如果是隐密入口,建议加上适当身份验证代码。)
[注意] 同时这里没有认证IP通报是否是我们服务器发来的,也就是随便谁都可以直接请求该地址,这样虚拟主机获取到IP地址就不是服务器IP地址了。如果需要改进,请自行编写相应程序。
(这里十分感谢天才的刘春龙的博客的以session实现类似asp的application对象的代码;只记录一个IP地址,没必要动用其它庞大的application实现方案)
把下载来的字符界面浏览器,放到合适的位置,比如 D:toolscurl 目录下。再建一个bat批处理文件,作用为请求虚拟主机上接受IP通报的页面,放在D:toolsipreporter目录下。代码如下:
D:toolscurlcurl.exe http://www.path8.net/mypeanut/?optype=report
在服务器上添加一个任务计划,执行上述bat批处理,时间设置为每10分钟执行一次(可酌情增加或减少执行频率)。
这样就完成了整个DIY花生壳的架设。
手工运行一下任务计划,然后打开[你的域名]/mypeanut/index.php,不出意外就运行正常了。
以上是在最简单网络环境下的DIY花生壳服务器架高详细过程。实际应用中,一般不会直接一台电脑连在ADSL猫上,一般都是多台电脑连成局域网,通过路由器对外上网。引入路由器好处当然在于共享带宽,合理利用网络资源;路由器同时还起到一个简单防火墙功能,屏敝多数服务监听端口,除非你在路由器上将它们打开。
下载附件:mypeanut_allfiles(含curl,.bat文件,服务器端php程序)
使用路由器(主要在于NAT配置)的具体方案下次再接着写。
(未完待续)
0 条评论。