公司中经常会搭建一些内部的网站,这些网站只能在公司的局域网中使用(链接同一个路由器的电脑),当访问这些网站时需要在浏览器中手动输入服务器ip地址进行访问,无法通过域名访问(域名:baidu.com 就是一个域名),这时可以通过搭建公司内部的DNS服务器解决。

现在想通过访问 http://mygitlab.com 就可以访问到位于 192.168.0.100 主机上的自己搭建的gitlab服务器
本文中要搭建的DNS服务器和gitlab服务器在同一台主机上,ip都是192.168.0.100,当然也可以不在同一台主机上

下载bind9

执行如下命令
apt-get install bind9

然后编辑bind9配置文件

找到/etc/bind/name.conf.default-zones文件
并在末尾添加

zone "mygitlab.com" {
        type master;
        file "/etc/bind/db.ip2mygitlab.com";
};

zone "100.0.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.mygitlab2ip";
};

其中100.0.168.192是mygitlab服务器的ip的反写,若你的服务器ip是abc.def.ghi.jkl则在这要写成 jkl.ghi.def.abc 。

然后在 /etc/bind 中创建 db.ip2mygitlab.com 文件 和 db.mygitlab2ip 文件,注意这两个文件名要和 name.conf.default-zones 中配置的file相同

然后在 db.ip2mygitlab.com 文件中填写如下内容,注意 :需要把下面的mygitlab.com换成你的域名,不要漏掉了域名后面的小数点,192.168.0.100是mygitlab服务器的ip,需要替换成你自己的。

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.mygitlab.com. root.mygitlab.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.mygitlab.com.
@       IN      A       192.168.0.100
ns      IN      A       192.168.0.100
cn      IN      A       192.168.0.100

然后在db.mygitlab2ip文件中填写如下内容,同样要替换mygitlab.com为你的域名。100是mygitlab服务器的ip的最后一段,需要替换成你自己的。

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.mygitlab.com. root.mygitlab.com. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      mygitlab.com.
1.0.0   IN      PTR     cn.mygitlab.com.
100     IN      PTR     mygitlab.com.
100     IN      PTR     www.mygitlab.com.
100     IN      PTR     dns.mygitlab.com.
100     IN      PTR     cn.mygitlab.com.

然后修改 /etc/bind/named.conf.options文件为如下内容

options {
    directory "/var/cache/bind";

    // If there is a firewall between you and nameservers you want
    // to talk to,you may need to fix the firewall to allow multiple
    // ports to talk. See http://www.kb.cert.org/vuls/id/800113

    // If your ISP provided one or more IP addresses for stable 
    // nameservers,you probably want to use them as forwarders. 
    // Uncomment the following block,and insert the addresses replacing 
    // the all-0's placeholder.

     forwarders {

        202.101.172.35;
        202.101.172.47;

     };

    //========================================================================
    // If BIND logs error messages about the root key being expired,
    // you will need to update your keys. See https://www.isc.org/bind-keys
    //========================================================================
    dnssec-validation auto;

    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};

 

其实只需要修改

forwarders { 202.101.172.35; 202.101.172.47; };

这个很关键,网上很多人说修改成 8.8.8.8 或 8.8.4.4 或 0.0.0.0,当修改成这三个后会发现访问外网特别慢,比如在公司内网访问 baidu.com,就非常慢,访问任何一个外网都很慢,原因是本地没有配置外网域名对应的ip,所以 bind9会去8.8.8.8 或 8.8.4.4 或 0.0.0.0这几个DNS服务器查询ip,本文中修改成了202.101.172.35;
202.101.172.47;
是因为自己搭建的DNS服务器位于杭州,用的电信的网,所以设置成了 202.101.172.35;
202.101.172.47;,具体设置成多少由你所在地区的网络提供上决定(你可以先百度一下ip就可以知道用的是电信还是联通还是移动的网,然后在百度一下你所在城市对应网络提供商的DNS服务器的ip即可)

然后执行service bind9 restart重启bind9 DNS服务器,

可以通过 nslookup 你的域名 查看是否配置成功

分别试了下 mygitlab.com 和 weibo.com,很快就返回了数据,若很慢说明 forwarders 中配置的 外网DNS服务器有问题。

接下来还需要修改路由器配置,把DNS服务器ip换成自己搭建的DNS服务器的ip即可。

登录路由器,找打dns设置选项,我的路由器是tp-link,把DNS服务器IP换成自己搭建的DNS服务器的ip就可了,我的是192.168.0.100,备用的DNS服务器可以不用填。

然后其他电脑断开网络链接,然后重新链接wifi,这时在网络链接中就可以看到DNS服务器ip变成了自己搭建的DNS服务器的ip了,备选的DNS服务器是路由器的ip。

然后其他电脑只要在公司内网并且直接通过 mygitlab.com 就可以访问了,但只能在公司内网通过mygitlab.com进行访问,在外网中无法直接通过 mygitlab.com 进行访问。

我还在 192.168.0.101主机上搭建了一个marketdown.com 服务器,配置只需要修改成如下配置即可:

然后执行service bind9 restart重启bind9 DNS服务器,其他电脑就可以通过 markdown.com 来访问了

 修改 /etc/bind 时可能没有权限,可以通过命令行切换到 bind目录,然后执行 sudo chmod -R a+r *sudo chmod -R a+w *为所有文件以及子目录中文件赋予读写权限。 可以使用 sublime 文本编辑软件新建和保存文件,免去权限操作麻烦

ubuntu搭建内网dns服务器的更多相关文章

  1. ios – 错误域= NSURLErrorDomain代码= -1003“找不到具有指定主机名的服务器

    当我尝试在设备上运行应用程序时出现此错误.当我在模拟器上运行它并且post请求正常工作时,我没有收到此错误.这是我的代码片段:任何帮助表示赞赏.谢谢解决方法此错误通常会提示DNS相关问题.检查设备上的DNS设置并确认您可以使用Safari或其他浏览器浏览互联网.如果有一个url,你可以在同一台服务器上获取,尝试直接在设备上的Safari中访问它.

  2. 将POD规范属性与其Xcode配置中的不同构建设置相关联(例如,发布,调试)

    我正在尝试为现有的库项目创建POD规范.在Xcode项目中,构建设置为不同的构建配置定义了不同的预处理器宏例如:对于“调试”配置:对于“发布”配置:如何将这些设置映射到相应的POD规范?

  3. Rxswift observable bind(to :) vs subscribe(onNext :)

    抱歉.我很困惑Rxswift中的绑定是什么.据我所知,除非观察者订阅了它,否则observable不会产生价值,例如myObservable.subscribe(onNext:{}).但是,当我阅读以下代码行时:我很困惑,为什么在不调用subscribe方法的情况下能够观察到isValidObservable?为什么我们可以在LoginViewController.swift中调用bind(to:

  4. Android中的外部存储上的SQLite性能不佳

    我可以在我的真实应用程序中添加我已禁用locking并且它没什么区别.解决方法CommonsWare的评论是正确的.对数据库性能产生重大影响的是使用事务.在事务中包装插入循环.我不是100%确定它是否适用于InsertHelper,但您可以尝试用以下方法替换for循环:

  5. android – butterknife中bind和injectView之间的区别

    我正在使用butterknife库.我不太了解如何使用它.我发现injectView和bind做同样的事情,但我不太确定.任何人都可以解释这两者之间的区别.解决方法谁能解释这两者之间的区别?

  6. Android服务有关bind/unbind的问题?

    客户端可以使用bindService()/unbindService()调用原始的bind/unbind服务.我的问题是如何解析服务端的服务,而不是客户端调用unbindService(),可能我应该称之为unbindClient.我认为服务应该知道哪些客户端绑定了它,那么有没有办法告诉服务取消绑定特定客户端?

  7. android – 在Mac上查看本地网络服务器,具有计算机名称,而不是IP

    解决方法简而言之,没有Android设备将无法通过.local地址默认访问您的Mac.OnMacs,“本地”通常会通过mDNS来解决.Android操作系统没有对mDNS的内置支持.Android通过标准DNS解析域名,除非您运行自己的本地DNS服务器,否则不会解析您的本地网络地址.Android设备要么使用ISP的DNS服务器,要么转发到ISP的路由器DNS服务器.

  8. Android实现清除单个域名的cookie

    这篇文章主要介绍了Android实现清除单个域名的cookie,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  9. 150行Node.js实现的dns代理工具

    这篇文章主要介绍了150行Node.js实现的dns代理工具,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  10. 深入理解JS中的Function.prototype.bind()方法

    bind 是 ES5 中新增的一个方法,可以改变函数内部的this指向。这篇文章小编将带领大家深入理解Javascript中的Function.prototype.bind()方法。有需要的朋友们可以参考借鉴,下面来一起看看吧。

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部