dns理论

dns的出现

网络出现的早期是使用IP地址通讯的,那时就几台主机通讯。但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和Windows也继承保留了这个文件)。这个文件中记录着主机名称和IP地址的对应表。这样只要输入主机名称,系统就会去加载hosts文件并查找对应关系,找到对应的IP,就可以访问这个IP的主机了。

但是后来主机太多了,无法保证所有人都能拿到统一的最新的hosts文件,就出现了在文件服务器上集中存放hosts文件,以供下载使用。互联网规模进一步扩大,这种方式也不堪重负,而且把所有地址解析记录形成的文件都同步到所有的客户机似乎也不是一个好办法。这时DNS系统出现了,随着解析规模的继续扩大,DNS系统也在不断的演化,直到现今的多层架构体系。

dns的解析过程

首先,客户端先在本地缓存查找有没有域名缓存,如果没有,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:

(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;

(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;

(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机           所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。

(4)若没有找到,则返回错误信息。

用户访问网站流程

第一步:客户端用户从浏览器输入www.baidu.com网站网址后回车,系统会查询本地hosts文件及DNS缓存信息,查找是否存在网址对应的IP解析记录。如果有就直接获取到IP地址,然后访问网站,一般第一次请求时,DNS缓存是没有解析记录的;

第二步:如果客户端没有DNS缓存或hosts没有对应www.baidu.com网站网址的域名解析记录,那么,系统会把浏览器的解析请求,交给客户端本地设置的DNS服务器地址解析(此DNS为LDNS,即Local DNS),如果LDNS服务器的本地缓存有对应的解析记录,就会直接返回IP地址;如果没有,LDNS会负责继续请求其它的DNS服务器;

第三步:LDNS会从DNS系统的“.”根开始请求www.baidu.com域名的解析,经过一系列的查找各个层次DNS服务器,最终会查找到www.baidu.com域名对应的授权DNS服务器,而这个授权DNS服务器,正是该企业购买域名时用于管理域名解析的服务器。这个服务器有www.baidu.com对应的IP解析记录,如果此时都没有,就表示企业的运维人员么有给www.baidu.com域名做解析;

第四步:baidu.com域名对应的授权DNS服务器会把www.baidu.com对应的最终IP解析记录发给LDNS;

第五步:LDNS把收到来自授权DNS服务器关于www.baidu.com对应的IP解析记录发给客户端浏览器,并且在LDNS本地把域名和IP的对应解析缓存起来,以便下一次更快的返回相同的解析请求的记录;

第六步:客户端浏览器获取到了www.baidu.com的对应IP地址,接下来浏览器会请求获得的IP地址对应的Web服务器,Web服务器接收到客户的请求并响应处理,将客户请求的内容返回给客户端浏览器;

至此,一次访问浏览网页的完整过程就完成了

博客地址:http://www.cnblogs.com/xinlibao/p/6633890.html

dns的分类

主DNS服务器:就是一台存储着原始资料的DNS服务器。

从DNS服务器:使用自动更新方式从主DNS服务器同步数据的DNS服务器。也称辅助DNS服务器。

缓存服务器:不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的结果,也叫递归服务器。

转发器:这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。

dig解析详解

[root@xinlibao xlb1.com]# dig -t A baidu.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A baidu.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37773

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 6

;; QUESTION SECTION:      #查询的内容

;baidu.com.                      IN    A

;; ANSWER SECTION: #相应的内容,一般会得到至少一条A 记录,否则就还没有定义。

baidu.com.              347 IN    A      111.13.101.208

;; AUTHORITY SECTION:  #授权信息

baidu.com.              22823     IN    NS    ns7.baidu.com.

baidu.com.              22823     IN    NS    ns4.baidu.com.

baidu.com.              22823     IN    NS    ns3.baidu.com.

baidu.com.              22823     IN    NS    ns2.baidu.com.

baidu.com.              22823     IN    NS    dns.baidu.com.

;; ADDITIONAL SECTION:  #每个授权服务器的IP

dns.baidu.com.               22823     IN    A      202.108.22.220

ns2.baidu.com.               22823     IN    A      61.135.165.235

ns3.baidu.com.               22823     IN    A      220.181.37.10

ns4.baidu.com.               22823     IN    A      220.181.38.10

ns7.baidu.com.               22823     IN    A      119.75.219.82

caishikou.redirect.        3600        IN    A      127.0.0.1

;; Query time: 35 msec

;; SERVER: 114.114.114.114#53(114.114.114.114)  #查询的dns服务器

;; WHEN: Sun Nov 26 21:23:41 2017

;; MSG SIZE  rcvd: 247

智能dns解析原理

DNS智能解析简单的来说就是根据DNS服务器根据客户端请求IP的不同来给客户端返回不同的服务器地址,比如说电信用户访问www.baidu.com的时候DNS服务器会返回给用户电信服务器,网通用户访问www.baidu.com的时候DNS服务器会返回给用户网通服务器,这样就解决了南北用户访问过慢或电信用户访问网通服务器过慢的问题,国内著名的DNSpod实现的也是这样的一个功能,而BIND9自带的VIEW视图功能就可以完全实现这个功能。VIEW视图可以说是BIND9一个最强大的功能之一,他可以完全按照你要求来实现DNS服务器对不同IP、不同网段的智能解析工作。

学习Bind

Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS.

环境准备

配置yum源。

我用的系统是centos6.8,使用centos6.8自带的yum源即可,同时确保机器可以解析外网域名,并能连接公网。

部署单dns

Yum安装bind

yum install bind-utils bind bind-devel bind-chroot -y

检查:

[root@dns ~]# rpm -qa|grep bind

bind-9.8.2-0.62.rc1.el6_9.4.x86_64

bind-chroot-9.8.2-0.62.rc1.el6_9.4.x86_64

bind-devel-9.8.2-0.62.rc1.el6_9.4.x86_64

bind-libs-9.8.2-0.62.rc1.el6_9.4.x86_64

bind-utils-9.8.2-0.62.rc1.el6_9.4.x86_64

编辑主配置文件之前copy一份cp /etc/named.conf{,.bak}

编辑主配置文件vi /etc/named.conf(配置文件,定义bind进程的工作属性,区域的定义。)

options {

  version "1.1.1";

  listen-on port 53 {any;}; #表示监听任何ip对53端口的请求

  directory "/var/named/chroot/etc/";

  pid-file "/var/named/chroot/var/run/named/named.pid";

  allow-query { any; }; #表示接收任何来源查询dns

  Dump-file "/var/named/chroot/var/log/binddump.db";

  Statistics-file "/var/named/chroot/var/log/named_stats";

  zone-statistics yes;

  memstatistics-file "log/mem_stats";

  empty-zones-enable no;

  forwarders {202.106.196.115;8.8.8.8; };

};

key "rndc-key" {

        algorithm hmac-md5;

        secret "Eqw4hClGExUWeDkKBX/pBg==";

};

controls {

       inet 127.0.0.1 port 953

               allow { 127.0.0.1; } keys { "rndc-key"; };

 };

logging {

  channel warning {

    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;

    severity warning;

    print-category yes;

    print-severity yes;

    print-time yes;

  };

  channel general_dns {

    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;

    severity info;

    print-category yes;

    print-severity yes;

    print-time yes;

  };

  category default {

    warning;

  };

  category queries {

    general_dns;

  };

};

include "/var/named/chroot/etc/view.conf";

编辑/etc/rndc.key(实现让远程工作的密钥文件)

key "rndc-key" {

        algorithm hmac-md5;

        secret "Eqw4hClGExUWeDkKBX/pBg==";

};

编辑/etc/rndc.conf(rndc的配置文件)

key "rndc-key" {

        algorithm hmac-md5;

        secret "Eqw4hClGExUWeDkKBX/pBg==";

};

options {

        default-key "rndc-key";

        default-server 127.0.0.1;

        default-port 953;

};

编辑/var/named/chroot/etc/view.conf

view "View" {

  zone "xlb.com" {

        type    master;

        file    "xlb.com.zone";

        allow-transfer {

                10.255.253.211;

        };

        notify  yes;

        also-notify {

                10.255.253.211;

        };

  };

};

  

编辑/var/named/chroot/etc/xlb.com.zone

$ORIGIN .

$TTL 3600       ; 1 hour

xlb.com                  IN SOA  op.xlb.com. dns.xlb.com. (

                                2000       ; serial

                                900        ; refresh (15 minutes)

                                600        ; retry (10 minutes)

                                86400      ; expire (1 day)

                                3600       ; minimum (1 hour)

                                )

                        NS      op.xlb.com.

$ORIGIN xlb.com.

shanks              A       1.2.3.4

op              A       1.2.3.4

修改权限

[root@dns ~]# cd /var && chown -R named.named named/

[root@dns var]# /etc/init.d/named start

Starting named:                                            [  OK  ]

域名解析验证

[root@dns var]# dig @127.0.0.1 shanks.xlb.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @127.0.0.1 shanks.xlb.com

; (1 server found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18531

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;shanks.xlb.com.                      IN    A

;; ANSWER SECTION:

shanks.xlb.com.              3600        IN    A      1.2.3.4

;; AUTHORITY SECTION:

xlb.com.          3600        IN    NS    op.xlb.com.

;; ADDITIONAL SECTION:

op.xlb.com.             3600        IN    A      1.2.3.4

;; Query time: 0 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Thu Nov 23 17:34:15 2017

;; MSG SIZE  rcvd: 81
[root@dns ~]# dig @172.16.1.128 shanks.xlb.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @172.16.1.128 shanks.xlb.com

; (1 server found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39717

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;shanks.xlb.com.                      IN    A

;; ANSWER SECTION:

shanks.xlb.com.              3600        IN    A      1.2.3.4

;; AUTHORITY SECTION:

xlb.com.          3600        IN    NS    op.xlb.com.

;; ADDITIONAL SECTION:

op.xlb.com.             3600        IN    A      1.2.3.40

;; Query time: 0 msec

;; SERVER: 172.16.1.128#53(172.16.1.128)

;; WHEN: Thu Nov 23 18:04:51 2017

;; MSG SIZE  rcvd: 81

配置智能dns(view视图)

编辑主配置文件vim /etc/named.conf   ##直接复制粘贴即可

options {

        listen-on port 53 {any;};

        allow-recursion {"none";};

        recursion yes;

        allow-query {any;};

        max-cache-ttl 900;

        directory "/var/named";

        pid-file "/var/named/named.pid";

        dump-file "/var/named/named_dump.db";

        statistics-file "/var/named/named.status";

};

include "/var/named/view/test1_view/ip";

include "/var/named/view/test1_view/view.conf";

编辑配置文件/var/named/view/test1_view/ip

##文件test1_view是没有的需要手动创建

mkdir /var/named/view/test1_view/ -p

##编辑配置文件ip

acl test1_view{

            192.168.1.110;

};

acl test2_view{

            172.16.1.50;

};

##编辑view.conf文件

view "test1" {

        match-clients { test1_view;};

        zone "xlb.com" in {

                 type master;

                 file "/var/named/xlb.com/zone.xlb.com";

                 allow-update{none;};

        };

};

view "test2" {

         match-clients { test2_view;};

         zone "xlb.com" in {

                 type master;

                 file "/var/named/xlb.com/zone.xlb1.com";

                 allow-update{none;};

        };

};

编辑/var/named/xlb.com/zone.xlb.com

##创建目录:

mkdir /var/named/xlb.com/ -p

##编辑 /var/named/xlb.com/zone.xlb.com

$ORIGIN .

$TTL 3600       ; 1 hour

xlb.com                  IN SOA  op.xlb.com. dns.xlb.com. (

                                2000       ; serial

                                900        ; refresh (15 minutes)

                                600        ; retry (10 minutes)

                                86400      ; expire (1 day)

                                3600       ; minimum (1 hour)

                                )

                        NS      op.xlb.com.

$ORIGIN xlb.com.

shanks              A       1.2.3.5

op              A       1.2.3.6

##编辑 /var/named/xlb.com/zone.xlb1.com

$ORIGIN .

$TTL 3600       ; 1 hour

xlb.com                  IN SOA  op.xlb.com. dns.xlb.com. (

                                2005       ; serial

                                900        ; refresh (15 minutes)

                                600        ; retry (10 minutes)

                                86400      ; expire (1 day)

                                3600       ; minimum (1 hour)

                                )

                        NS      op.xlb.com.

$ORIGIN xlb.com.

op                 A       192.168.122.2

shanks               A       192.168.122.2

编辑master节点vim /var/named/chroot/etc/group2.viewlnh.com.zone

$ORIGIN .

$TTL 3600       ; 1 hour

viewlnh.com                  IN SOA  op.viewlnh.com. dns.viewlnh.com. (

                                2005       ; serial

                                900        ; refresh (15 minutes)

                                600        ; retry (10 minutes)

                                86400      ; expire (1 day)

                                3600       ; minimum (1 hour)

                                )

                        NS      op.viewlnh.com.

$ORIGIN viewlnh.com.

op                 A       192.168.122.2

view               A       192.168.122.2

配置完成后可以检查语法

named-checkconf

修改文件所属,加载配置。

chown named.named /var/named/*

rndc reload

验证IP地址192.168.1.110

验证 IP地址192.168.1.110

[root@xinlibao xlb.com]# dig -t A op.xlb.com @192.168.1.110 #这是我本机ip就是dns服务器ip

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A op.xlb.com @192.168.1.110

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 418

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; WARNING: recursion requested but not available

;; QUESTION SECTION:

;op.xlb.com.                     IN    A

;; ANSWER SECTION:

op.xlb.com.             3600        IN    A      1.2.3.6

;; AUTHORITY SECTION:

xlb.com.          3600        IN    NS    op.xlb.com.

;; Query time: 0 msec

;; SERVER: 192.168.1.110#53(192.168.1.110)

;; WHEN: Mon Nov 27 09:54:38 2017

;; MSG SIZE  rcvd: 58

[root@xinlibao xlb.com]# dig -t A shanks.xlb.com @192.168.1.110

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A shanks.xlb.com @192.168.1.110

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12427

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; WARNING: recursion requested but not available

;; QUESTION SECTION:

;shanks.xlb.com.                      IN    A

;; ANSWER SECTION:

shanks.xlb.com.              3600        IN    A      1.2.3.5

;; AUTHORITY SECTION:

xlb.com.          3600        IN    NS    op.xlb.com.

;; ADDITIONAL SECTION:

op.xlb.com.             3600        IN    A      1.2.3.6

;; Query time: 0 msec

;; SERVER: 192.168.1.110#53(192.168.1.110)

;; WHEN: Mon Nov 27 09:56:14 2017

;; MSG SIZE  rcvd: 81

验证ip地址172.16.1.50

[root@xinlibao xlb.com]# dig -t A shanks.xlb.com @172.16.1.50

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A shanks.xlb.com @172.16.1.50

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20873

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; WARNING: recursion requested but not available

;; QUESTION SECTION:

;shanks.xlb.com.                      IN    A

;; ANSWER SECTION:

shanks.xlb.com.              3600        IN    A      192.168.122.2

;; AUTHORITY SECTION:

xlb.com.          3600        IN    NS    op.xlb.com.

;; ADDITIONAL SECTION:

op.xlb.com.             3600        IN    A      192.168.122.2

;; Query time: 0 msec

;; SERVER: 172.16.1.50#53(172.16.1.50)

;; WHEN: Mon Nov 27 09:58:20 2017

;; MSG SIZE  rcvd: 81

[root@xinlibao xlb.com]# dig -t A op.xlb.com @172.16.1.50

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A op.xlb.com @172.16.1.50

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23688

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; WARNING: recursion requested but not available

;; QUESTION SECTION:

;op.xlb.com.                     IN    A

;; ANSWER SECTION:

op.xlb.com.             3600        IN    A      192.168.122.1

;; AUTHORITY SECTION:

xlb.com.          3600        IN    NS    op.xlb.com.

;; Query time: 0 msec

;; SERVER: 172.16.1.50#53(172.16.1.50)

;; WHEN: Mon Nov 27 10:00:06 2017

;; MSG SIZE  rcvd: 58

DNS单机部署以及智能dns部署的更多相关文章

  1. C#实现DNS解析服务和智能DNS服务

    C#实现DNS解析服务有一个开源项目ARSoft.Tools.Net, ARSoft.Tools.Net是一个非常强大的开源DNS控件库,包含.Net SPF validation, SenderID ...

  2. DNS原理和智能DNS及CDN

    CDN是什么 CDN(Content Delivery Network)是内容分发网络. 作用: 使用户可以就近取的所需要的内容,加速用户访问网站资源的速度.物理距离更近,响应速度更快.拦截部分网络请 ...

  3. 架构师成长之路6.3 DNS服务器搭建(部署单台DNS)

    点击返回架构师成长之路 架构师成长之路6.3 DNS服务器搭建(部署单台DNS) 1.安装bind yum -y install bind-utils bind bind-devel bind-chr ...

  4. CDN和智能DNS原理和应用 (原)

    CDN是什么? CDN的全称是Content Delivery Network,即内容分发网络. CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调 ...

  5. BindWeb - Bind智能DNS管理系统介绍

    2019-05-08 演示网站: https://bindw.cdneks.com demo/demo 2018-11-27 修改部署架构,取消网络共享存储设备,在每台BIND服务器启用NFS4并仅向 ...

  6. CDN与智能DNS原理和应用

    1.cdn概念,DNS概念 CDN:Centent Delivery Network(内容分发网络) 使用户可以就近取得所需内容,提高用户访问网站相应速度 CDN=更智能的镜像+缓存+流量导流: DN ...

  7. 烂泥:智能DNS使用与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 公司的业务现在已经扩展到海外,对外提供的统一接口都是通过域名来解析的,但是海外用户访问国 ...

  8. 简单介绍智能DNS解析+双线路接入

    导读:在讨论这个问题,其中群友老孤同志也提供了不少非常有参考价值的资料,所以我们再把这些资料再整理一次,从比较底层的技术原理上重新进行一次分析.   我们知道,因为南电信北网通现象的存在,我们的服务器 ...

  9. 才知道百度也提供了智能DNS服务 - 加速乐

    http://jiasule.baidu.com/ 智能DNS 依托百度多年积累的高精度DNS识别库,平均只需5秒全球DNS服务器全部生效,百度蜘蛛1秒生效.抗攻击.无限解析记录,免费支持电信.联通. ...

随机推荐

  1. 【ASP.NET MVC 学习笔记】- 20 ASP.NET Web API

    本文参考:http://www.cnblogs.com/willick/p/3441432.html 1.ASP.NET Web API(本文简称Web API),是基于ASP.NET平台构建REST ...

  2. CentOS6编译LAMP基于FPM模式的应用wordpress

    CentOS6编译LAMP基于FPM模式的应用wordpress 引言:其实我们可以直接使用yum安装LAMP(Linux+Apache[httpd]+Mysql+PHP),比手动编译安装LAMP要简 ...

  3. 快速部署PostgreSQL

    PostgreSQL通常也简称Postgres,是一个关系型数据库管理系统,适用于各种Linux操作系统.Windows.Solaris.BSD和Mac OS X.本文基于CentOS7,使用yum源 ...

  4. [http服务]

    [http服务] CentOS 6 httpd 程序环境 记录了httpd的主进程编号: v 主程序文件: /usr/sbin/httpd /usr/sbin/httpd.worker /usr/sb ...

  5. mysql用户权限设置,远程访问设置、设置固定ip远程访问,设置root用户不能远程访问mysql数据库

    关于mysql的用户管理,笔记   1.创建新用户 通过root用户登录之后创建 >> grant all privileges on *.* to testuser@localhost ...

  6. Python Web框架篇:Django文件上传

    上传方式: - Form表单上传文件 - Ajax上传文件 - 基于form表单和iframe自己实现ajax请求 1,创建项目 2,settings配置(注册app01,static路径等等这些)及 ...

  7. Coursera上视频无法播放将怎么解决?

    相信很多朋友在播放Coursera中的视频都会遇到一个问题,视频全黑,点击播放,进度条转了一圈又消失不见. 这时候我们该找找是什么问题啦? 解决方法一: 如果你是FQ看的网课视频,那么你把VPN从au ...

  8. Ignatius and the Princess II

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...

  9. 【Kafka源码】ReplicaManager启动过程

    在KafkaServer启动过程的入口中,会启动Replica Manager,众所周知,这是一个副本管理器.replica在Kafka中扮演的角色很重要,是保证消息不丢失的一个重要概念. repli ...

  10. [译]ASP.NET Core 2.0 区域

    问题 如何将一个规模庞大的ASP.NET Core 2.0应用程序进行逻辑分组? 答案 新建一个ASP.NET Core 2.0空项目,修改Startup类,增加Mvc服务和中间件: public v ...