浅谈解决动态IP和80端口被封闭的办法

2014-09-27 浏览:6222
浅谈解决动态IP和80端口被封闭的办法
评论:(2)复制地址

废话: 

     一直想在本地搭建一个服务器,至于有什么用、干嘛用,我也不知道,也许就是喜欢捣腾吧。
      现在本地建站阻碍越来越多,动态IP、80端口封闭、NAT转发……,唉~
      还好还有些希望,比如电信目前还是对外真实IP,不像移不动直接给NAT转发了,直接灭了一些希望 =_=!
      还有就是有一批大小公司在帮着我们解决问题 (*^__^*)   


目标:
      外界能通过域名直接访问到本地环境上的网站。

阻碍:
      动态IP、80端口封闭。(移动网的话,还有被NAT转发了的困境)

解决动态IP:
      办法1:申请固定IP。(别拿砖拍我,也许土豪就需要这个答案呢)
      方法2:不关机OR不关路由器。(貌似这办法已经失效了,网络提供商会定时刷新)
      方法3:使用花生壳、nat123或DNSPod等,电脑装一下他们的客户端,然后帮上域名就OK了。(路由器一般都直接支持花生壳)
      //可能有些人总会感觉第三方软件或平台不安全、太多广告,限制多、收费……,那我们就自己弄一个。(需要公网主机或空间)
      方法4:可以自己写个脚本OR小软件,实时将本地公网IP发送给处在公网的主机,然后主机上再转发、代理或跳转过来。
      //当然也可以使用自己脚本加第三方的平台,这样既拒绝了客户端的广告……也省掉了公网主机。
      方法5:通过脚本实时更新第三方平台的dns解析地址,例如:shell脚本+DNSPod。

解决80端口被封:
      //80端口被封闭其实并不是太影响我们,毕竟我们不是真的想在本地搭建一个生产环境。
      //本地建服务器用于生产的话,还是有很多瓶颈的,例如带宽、稳定性……
      //当然也要为了使用方便,我可不希望我的网站网址长这样“http://zpblog.cn:8888”
      方法1:通过nat123进行80端口映射。(应该也有其他提供类似服务的网站,你们可以百度百度)
      方法2:通过nat123上面的url隐形转发。(我也试过其他DNS服务商的URL隐形转发,但貌似都不能带端口)
      方法3:通过公网的主机或者空间进行代理转发或者跳转等。(在自己的主机空间上那就自由多了,方法也很多)

下面给出两个不借助路由及客户端的实例

实例1:
      本机环境:
          系统:Ubuntu;网络:电信(动态公网IP、80及8080被封、其他端口正常)。
      使用方法:
          通过脚本实时更新DNSPod上的域名解析以解决动态IP,再通过nat123的url隐藏转发以解决80封闭
      具体过程:
          首先注册nat123和DNSPod并接入域名。
          然后在DNSPod上建个二级域名,例如:“nat.zpblog.cn”
          接着拷贝附件中的“DNSPod更新脚本”到你的电脑,把最下面的“#设置用户参数”和“#检查更新域名”改成你自己的。
          执行脚本,然后到DNSPod上看看域名的解析地址是否给成你本地的公网IP地址了,也可以ping一下看看。
          测试一下,例如通过“http://nat.zpblog.cn:8888”看能不能访问,如果不能,试一下“http://ip:8888”看看能不能访问
          然后到nat123上面设置url隐藏转发。例如将“zpblog.cn”转发到“http://nat.zpblog.cn:8888”
          最后将上面的脚本设置成定时执行,我们就可以直接通过“http://zpblog.cn”访问了
      友情提示:
          域名的解析、转发等生效等都是需要时间的,请耐心等待生效。

实例2:
      本机环境:
          系统:都行;网络:电信(动态公网IP、80及8080被封、其他端口正常)。
      使用方法:
          通过定时将IP发送到公网主机或空间以解决动态IP,再通过公网主机空间跳转以解决80封闭
      具体过程:
          首先你的有一个处于公网的主机或者空间。
          在公网主机或者空间上放上附件中的“IP接收GetIP.php”这个文件
          在本地电脑上加上一个定时访问GetIP这个页面,例如:“curl zpblog.cn/GetIP.php”
          将域名指向这个主机或者空间,并在这个主机上上传附件中“IP跳转JumpIP.php”这个文件,并重名为index.php
          通过域名就可以直接访问了,看看是否直接跳转到你本地环境了



附件:

DNSPod更新脚本

    #!/bin/sh
     
    #################################################
    # AnripDdns v3.08.09
    # 基于DNSPod用户API实现的动态域名更新
    # 作者: 若海[[email protected]]
    # 介绍: http://www.anrip.com/ddnspod
    #################################################
     
    # 全局变量表
    arPass=arMail=""
     
    # 获得外网地址
    arIpAdress() {
        local inter="http://members.3322.org/dyndns/getip"
        wget --quiet --no-check-certificate --output-document=- $inter
    }
     
    # 查询域名地址
    # 参数: 待查询域名
    arNslookup() {
        local dnsvr="114.114.114.114"
        nslookup ${1} $dnsvr | tr -d '\n[:blank:]' | sed 's/.\+1 \([0-9\.]\+\)/\1/'
    }
     
    # 读取接口数据
    # 参数: 接口类型 待提交数据
    arApiPost() {
        local agent="AnripDdns/3.08([email protected])"
        local inter="https://dnsapi.cn/${1:?'Info.Version'}"
        local param="login_email=${arMail}&login_password=${arPass}&format=json&${2}"
        wget --quiet --no-check-certificate --output-document=- --user-agent=$agent --post-data $param $inter
    }
     
    # 更新记录信息
    # 参数: 主域名 子域名
    arDdnsUpdate() {
        local domainID recordID recordRS recordCD
        # 获得域名ID
        domainID=$(arApiPost "Domain.Info" "domain=${1}")
        domainID=$(echo $domainID | sed 's/.\+{"id":"\([0-9]\+\)".\+/\1/')
        # 获得记录ID
        recordID=$(arApiPost "Record.List" "domain_id=${domainID}&sub_domain=${2}")
        recordID=$(echo $recordID | sed 's/.\+\[{"id":"\([0-9]\+\)".\+/\1/')
        # 更新记录IP
        recordRS=$(arApiPost "Record.Ddns" "domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&record_line=默认")
        recordCD=$(echo $recordRS | sed 's/.\+{"code":"\([0-9]\+\)".\+/\1/')
        # 输出记录IP
        if [ "$recordCD" == "1" ]; then
            echo $recordRS | sed 's/.\+,"value":"\([0-9\.]\+\)".\+/\1/'
            return 1
        fi
        # 输出错误信息
        echo $recordRS | sed 's/.\+,"message":"\([^"]\+\)".\+/\1/'
    }
     
    # 动态检查更新
    # 参数: 主域名 子域名
    arDdnsCheck() {
        local postRS
        local hostIP=$(arIpAdress)
        local lastIP=$(arNslookup "${2}.${1}")
        echo "hostIP: ${hostIP}"
        echo "lastIP: ${lastIP}"
        if [ "$lastIP" != "$hostIP" ]; then
            postRS=$(arDdnsUpdate $1 $2)
            echo "postRS: ${postRS}"
            if [ $? -ne 1 ]; then
                return 0
            fi
        fi
        return 1
    }
     
    ###################################################
     
    # 设置用户参数
    arMail="[email protected]"
    arPass="******"
     
    # 检查更新域名
    arDdnsCheck "zpblog.cn" "nat"

IP获取GetIP.php

<?php
    # GetIP.php
    # 用于获取来访IP并存入ip.txt文件
    # By zpblog.cn
    
    //获取来访IP
    function getIP(){
    global $ip;
    if (getenv("HTTP_CLIENT_IP"))
    $ip = getenv("HTTP_CLIENT_IP");
    else if(getenv("HTTP_X_FORWARDED_FOR"))
    $ip = getenv("HTTP_X_FORWARDED_FOR");
    else if(getenv("REMOTE_ADDR"))
    $ip = getenv("REMOTE_ADDR");
    else $ip = "Unknow";
    return $ip;
    }
    
    echo getIP();
    
    //将获取的IP存入ip.txt文件中。
    $file = 'ip.txt';
    if (is_writable($file) == false) {
             die('file not found');
    }
    $data = getIP();
    file_put_contents ($file, $data);    
?>

IP跳转JumpIP.php


<?php 
    # JumpIP.php
    # 用于读取文件ip.txt里的地址,然后转发过去。
    # By zpblog.cn
    
    //读取ip.txt中的IP地址
    $file = "ip.txt";
    if (file_exists($file) == false) {
             die('file not found');
    }
    $data = file_get_contents($file);    
?>  
    <frameset>
    <!-- 跳转到获取的IP地址 -->
    <frame src="http://<?php echo $data;?>:8888" />
    </frameset>


友情链接:
      花生壳官网
      nat123官网
      DNSPod官网

评论:(2)复制地址
发布:zpblog | 分类:Other | Tags:ip 端口

评论列表:

lee

评论于2014-11-29 08:49:42
又发现了一个叫 ngrok 网站,也是做转发的,还没测试,测完再更新 - 回复该评论

lee

评论于2014-12-09 20:14:08
又发现了一个叫 ngrok 网站,也是做转发的,还没测试,测完再更新 - 回复该评论

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。