公司内网搭建代理DNS使用内网域名代替ip地址

企业场景
一般在企业内部,开发、测试以及预生产都会有一套供开发以及测试人员使用的网络环境。运维人员会为每套环境的相关项目配置单独的Tomcat,然后开放一个端口,以 IP+Port 的形式访问。然而随着项目的增多,对于开发和测试人员记住如此多的内网地址,无疑是一件头疼的事情(当然你也可以使用浏览器书签管理器或者记录在某个地方)。但是你不永远不会确定,那天由于升级突然改了IP,我们可能又要重新撸一遍配置,所以内网域名还是非常有必要的。
内网域名具体有哪些优点:
- 方便记忆
- 变更IP,只需要修改DNS即可
服务器环境
192.168.1.170(开发)
192.168.1.180(测试)
192.168.1.190(预生产)
192.168.1.125(DNS+Nginx)
DNS安装
安装容器
为了方便,我们使用docker环境手动搭建一个DNS服务器。
选择andyshinn/dnsmasq的docker镜像,2.75版本,执行命令:
docker run -d -p 53:53/tcp -p 53:53/udp --cap-add=NET_ADMIN --name dns-server andyshinn/dnsmasq:2.75
执行完毕以后,通过命令查看是否创建并运行成功:
[root@test125 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38ae71377ef1 andyshinn/dnsmasq:2.75 "dnsmasq -k" 22 hours ago Up About an hour 0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp dns-server
配置DNS
进入容器:
docker exec -it dns-server /bin/sh
创建代理文件:
vi /etc/resolv.dnsmasq
添加内容:
nameserver 114.114.114.114
nameserver 8.8.8.8
新建本地解析规则配置:
vi /etc/dnsmasqhosts
添加解析规则:
192.168.1.125 dev.52itstyle.com test.52itstyle.com sit.52itstyle.com
修改dnsmasq配置文件,指定使用上述两个我们自定义的配置文件:
vi /etc/dnsmasq.conf
追加下述两个配置
resolv-file=/etc/resolv.dnsmasq
addn-hosts=/etc/dnsmasqhosts
退出容器:
exit
重启容器:
docker restart dns-server
Nginx安装
安装OpenResty之前需要下载一些必备的依赖:
yum install readline-devel pcre-devel openssl-devel -y
yum install wget perl gcc -y
下载最新版本:
wget https://openresty.org/download/openresty-1.13.6.1.tar.gz
解压:
tar -xvf openresty-1.13.6.1.tar.gz
安装配置:
./configure
您可以使用下面的命令来编译安装:
make && make install
如果您的电脑支持多核 make 工作的特性, 您可以这样编译安装:
make && make install -j2
为了方便启动,建立软连接:
ln -s /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
在/usr/local/openresty/nginx/conf文件夹下创建vhosts目录,然后依次创建一下文件(演示文件,正式环境中会有多个项目转发)。
dev.52itstyle.com.conf:
server{
listen 80;
server_name dev.52itstyle.com;
proxy_set_header Host $host;
location /{
proxy_pass http://192.168.1.170:8080;
}
}
test.52itstyle.com.conf:
server{
listen 80;
server_name test.52itstyle.com;
proxy_set_header Host $host;
location /{
proxy_pass http://192.168.1.180:8080;
}
}
sit.52itstyle.com.conf:
server{
listen 80;
server_name sit.52itstyle.com;
proxy_set_header Host $host;
location /{
proxy_pass http://192.168.1.190:8080;
}
}
配置文件:
vi /usr/local/openresty/nginx/conf/nginx.conf
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#导入各个环境
include vhosts/*.conf;
}
启动服务:执行 nginx命令即可。
本机验证
那么如何验证这些域名可以解析到我们的内网项目,只需要修改本机dns服务器地址即可:

配置完成后,我们就可以通过dev.52itstyle.com等相关域名访问我们的内网项目了。
当然,最好是可以直接修改路由器的DNS,这样就不用每个电脑都配置DNS了。
公司内网搭建代理DNS使用内网域名代替ip地址的更多相关文章
- C# 版 防止 DNS 污染,获取域名真实 IP 地址
using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Net. ...
- 一文看懂:网址,URL,域名,IP地址,DNS,域名解析
一个执着于技术的公众号 前言 今天给大家梳理一篇关于网址.URL.IP地址.域名.DNS.域名解析的白话长文,并以简单的提问-解答 形式让读者更加深刻理解,希望有助于读者的学习,面试和工作! 1.一个 ...
- DNS服务器安全---通过ipset对DNS异常解析流量的源IP地址进行管控
ipset介绍 ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则.而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以 ...
- Nginx反向代理后,java获取客户端真实IP地址
一般情况下,java获取客户端IP地址的方法为request.getRemoteAddr();但这只是在没有网关或者代理的情况下,如果客户端将请求发送到nginx,再由nginx进行反向代理到目标服务 ...
- WEB服务器、网站、域名、IP地址、DNS服务器之间的关系
域名首先指向你的服务器,这个过程叫解析. 服务器分成好多小块,每小块叫一个空间或者一个虚拟主机. 所以当你输入你的域名以后,服务器收到你域名的访问信息,但不知道要打开这么多个小块中的那一个.所以要 ...
- 解决: osx内置vpn连接后无法ping自己的vpn ip地址
The route table looks like this after connected to the VPN: 10.20.1/24 10.20.11.147 UGSc 0 0 utun0 1 ...
- 计算机网络九:IP地址、子网掩码、默认网关、DHCP服务器、DNS服务器、WINS服务器
一.IP地址与子网掩码 1.IP地址 ipv4下,ip地址=网络号+主机号. 2.子网掩码 子网掩码(subnet mask)又叫网络掩码.地址掩码.子网络遮罩,它是一种用来指明一个I ...
- DNS 解释 --- 解析域名给电脑,电脑只看得懂1.1.1.1.1 这些ip地址 所以要翻译给他
把域名翻译成IP地址的软件称为域名系统,即DNS 当网络上的一台客户机需要访问某服务器上的资源时,客户机的用户只需要在浏览器中的地址文本框中输入该服务器的网址.就可以与该服务器进行连接,计算机的硬件只 ...
- ip地址、域名、DNS、URL(即网址)的区别与联系
域名和ip ================================================================ 我们也知道每一台机都有一个唯一ip地址, 特别难记,所以出 ...
随机推荐
- 如何在Cocos2D 1.0 中掩饰一个精灵(五)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰和CCRenderTexture CCRenderTextu ...
- Java进阶(六)Java反射机制可恶问题NoSuchFieldException
作为一种重要特性,Java反射机制在很多地方会用到.在此做一小结,供朋友们参考. 首先从一个问题开始着手. 可恶的问题又来了,NoSuchFieldException,如下图所示: 完全不知道这个qu ...
- Android官方命令深入分析之虚拟机
Android SDK包含了一个运行在计算机上的移动设备虚拟机.这个虚拟机可以允许你在没有物理设备的情况下开发和测试Android应用. 键盘命令 虚拟设备按键 对应键盘按键 Home HOME 菜单 ...
- bootmgr解压缩
主要参考以下两个文章: 1. http://bbs.wuyou.com/forum.php?mod=viewthread&tid=211314 2. http://reboot.pro/f ...
- Android的加速度传感器模拟摇一摇的效果-android学习之旅(66)
主要介绍一下android的加速传感器的简单用法,模拟摇一摇 ,如果x,y,z三个方向的加速度超过了15,就会弹出Toast,当然你可以设置更复杂的策略,比如判断间隔 代码如下 public clas ...
- Android开机键失灵启动手机的解决办法
问题描述 Android手机的关机键损坏,无法开机. 解决方法 将手机通过USB线链接电脑,进入命令行,找到adb命令所在目录,运行如下命令: adb reboot 注意:用这种方法的前提是,如果你当 ...
- jsp自动编译机制
总的来说,Jasper的自动检测实现的机制比较简单,依靠某后台线程不断检测JSP文件与编译后的class文件的最后修改时间是否相同,若相同则认为没有改动,但倘若不同则需要重新编译.实际上由于在Tomc ...
- UIView、UIViewLayout UI_01
1.首先:在UI里面我们使用的是MRC,需要把ARC改成NO: 若学习比较吃力,可以先学习一下基础: http://blog.sina.com.cn/s/blog_814ecfa90102vuzg.h ...
- 学习pthreads,使用条件变量进行多线程之间的同步
条件变量提供另一种多线程同步的方法.互斥量通过控制对共享数据的访问来同步任务.条件变量可以根据数据的值来同步任务.条件变量是当一个事件发生时发送信号的信号量.一旦事件发生,可能会有多个线程在等待信号, ...
- cuda中模板的使用
模板是C++的一个重要特征,它可以让我们简化代码,同时使代码更整洁.CUDA中也支持模板,这给我们编写cuda程序带来了方便.不过cuda4.0之前和之后使用模板的方法不一样,这给我们带来了少许困难. ...