当前位置: 首页 > news >正文

【主机名变bogon】linux主机名被更改为bogon原理分析

博客原址:http://blog.csdn.net/weiwan721/article/details/48463371

问题描述:

操作系统为RHEL6.5,安装时使用的是默认主机名localhost,后来不知道怎么,在没有人修改的情况下,重启后就变成了bogon。导致我们的数据库等应用无法正常启动。在排除人为修改的原因后,检查了/etc/sysconfig/network等文件,发现里面HOSTNAME是localhost,并没有什么问题。后来经过联系红帽客服及在群里寻求帮助,当然还有伟大的度娘和谷歌,终于算是基本搞明白了其中的原因。

成因分析:

linux系统启动时,会经历BOIS自检,系统引导,启动内核,初始化系统这几步,其中初始化系统时,会依次执行/etc/rc.sysinit,/etc/rc.d/rc* 等脚本文件,其中在rc.sysinit有这样一段代码

[plain]  view plain   copy
  1. if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]; then  
  2.          ipaddr=$(ip addr show to 0.0.0.0/0 scope global | awk '/[[:space:]]inet / { print gensub("/.*","","g",$2) }')  
  3.          for ip in $ipaddr ; do  
  4.                  HOSTNAME=  
  5.                  eval $(ipcalc -h $ip 2>/dev/null)  
  6.                  [ -n "$HOSTNAME" ] && { hostname ${HOSTNAME} ; break; }  
  7.          done  
  8.  fi  
这段代码先判断了主机名,如果主机名是localhost或者localhost.localdomain,则获取主机IP地址并执行DNS逆向解析,将解析到的结果赋值给HOSTNAME。假设我主机IP为192.168.1.47,手动执行下列命令,得到的返回值为bogon。也就是莫名其妙出现的主机名
[plain]  view plain   copy
  1. ipcalc -h 192.168.1.47  

经查阅资料,了解到有些DNS服务器,会将私有地址,保留地址这样的不应该出现在网络上的IP地址解析成bogon。

解决方法:

知道问题的原因了,解决起来也就容易了。

推荐的最佳解决方案,是修改主机名,只要主机名不是localhost或者localhost.localdomain,那么操作系统就不会执行DNS反向解析等操作,问题自然也不会出现。而且并不推荐使用默认主机名进行系统安装。具体操作就是修改/etc/sysconfig/network文件中HOSTNAME键值。

再有就是更改DNS域名服务器,有些域名服务器会对bogon进行过滤。多试试哪些行哪些不行。或者不给服务器配置DNS,大部分服务器其实是没有上网需求的。DNS服务器一般是在/etc/resolv文件中,有些也会写在/etc/sysconfg/network-scripts/ifcfg-eth0中。

原文:http://m.blog.csdn.net/article/details?id=51554785

案例:

服务器启动后发现无法连接到数据库,查看日志报错信息为:

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

看到111,在linux下perror  111 查看错误码

[root@bogon~]# perror 111
OS error code 111:  Connection refused

是拒绝连接,以为是权限问题

 1、第一想到的是查看了防火墙,是未开启的排除
 2、第二个想到的是SElinux 的权限限制,用命令 getenforce 查看器状态

[root@bogon~]# getenforce
Enforcing

发现SElinux 权限系统处于有效状态,有可能会对文件的一些权限进行限制

用命令 setenforce 0  改变SElinux的状态为: Permisstive (监控但不限制)


还是连不上。

查看mycat的工作状态,发现mycat 没有运行。
[root@bogon~]# /usr/local/mycat/bin/mycat status
Mycat-server is not running.


所以查看mycat的错误日志 /usr/local/mycat/logs/wrapper.log

ERROR  | wrapper  | 2016/08/11 11:08:22 | JVM exited while loading the application.
INFO   | jvm 2    | 2016/08/11 11:08:22 | Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: bogon: bogon: Name or service not known


看到:Local host name unknown: java.net.UnknownHostException: bogon 


看命令行处的主机名确实已经被变为 bogon  :[root@bogon~]#

而mycat正常启动的机器的主机名都为:localhost [root@localhost~]#


尝试将主机名改回localhost,查阅相关资料修改主机名需要修改的文件是: /etc/sysconfig/network  和 /etc/hosts  (对照其他机器修改)


发现修改重启后,主机名仍然是 bogon,mycat仍然无法启动


查找主机名配置文件不生效,主机名仍旧被改为bogon的原因,查到的结果是:


出现这个问题的原因
终端在初始化时,需要确定主机的名字,此时终端会向 DNS 服务器反向查询本机 IP 地址,然后把得到的名字作为自己的主机名。如果没有反向解析的结果,就会显示本机设置的主机名。

那么 bogon 是什么意思呢?一个 DNS 反向解析名为 bogon 的 IP 地址不会显示在 traceroute 中。

该问题可能是在一个路由器组织的局域网环境中,并且你的 DNS 地址是你路由器的地址,这样终端反向查询你本机 IP 地址得到的结果是 bogon,于是你在终端里显示的主机名就变成了 bogon。

链接:http://www.zhihu.com/question/25849047/answer/84188294

(traceroute 是检测到达目的地所经过的所有路由器,Traceroute IP地址或域名。测试出来的结果就是你的主机,到达对方经过了多少台路由,从而判断在那个路由出了问题。ping 是用来检测网络的连通性)


bogon是指那些不该出现在internet路由表中的地址吧
 这些地址应该包括:
1,私有地址如10,172.16-32,192.168.....
2,还未正式分配出去的地址


还有一种定义的说法:

bogon就是Martians(就是私有地址和保留地址的称呼,详见RFC1918和RFC5735)和IANA未分配给RIR的并集。

这里有一份由IANA维护的IPV4分配列表

在这里可以看到 005/8就是未分配的地址,也就是bogon range。

同时还有一个概念叫做Fullbogons,它的定义范围比bogon还要大,指的是那些虽然IANA分配给RIR的地址,但是这些地址RIR没有分配给ISP或者end-user使用的地址。

所以来讲,bongon是没有什么用处的,需要在路由上设置ACL或者做BGP BLACKHOLING过滤掉

那么,我的主机名变成bogon是怎么回事又该怎么办呢?

可能是在反向解析IP时,DNS没有过滤bogon,所以把内网的IP反向解析成了bogon

所以把DNS换成一个过滤了bongon的DNS是其中一种解决办法

考虑到我们的服务器放到5楼之后,网卡1的IP是192.168.0.250 内网使用,网卡2的地址 是自动获取地址,不是静态地址。怀疑是用到了dhcp,怀疑是用了DHCP之后,会去DNS服务器解析域名/主机名(反向解析;正向解析:通过域名查找ip;
反向解析:通过ip查找域名) 端会先向 DNS 请求查询当前 IP 的反向域名解析的结果,如果查询不到再显示我们设置的计算机名。而由于我们的 DNS 错误地将保留地址反向的 NS 查询结果返回了 bogon. 其中 bogon 本应该用来指虚假的 IP 地址,而非保留 IP 地址。


所以我尝试将外网连接的地址改为了静态的地址,问题就解决了。


至于如何在动态获取地址的情况下正确返回,因为服务器的IP的地址是映射的地址,中间的网络映射关系和相关的网络知识需要去研究,暂时没有时间去研究。暂时以设置静态IP的方式解决该问题。


相关资料:

hostname和/etc/hosts的区别

很多人一提到更改hostname首先就想到修改/etc/hosts文件,认为hostname的配置文件就是/etc/hosts。其实不是的。hosts文件的作用相当于DNS,提供IP地址hostname的对应。早期的互联网计算机少,单机hosts文件里足够存放所有联网计算机。
不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。
由此,/etc/hosts于设置hostname是没直接关系的,仅仅当你要在本机上用新的hostname来映射自己的IP时候才会用到/etc/hosts文件。两者没有必然的联系。redhat的hostname的配置文件是/etc/sysconfig/network.


 /etc/hosts内容摘录如下:

          # Do not remove the following line, or various programs

          # that require network functionality will fail.

          192.168.1.102   localhost.localdomain  localhost

          127.0.0.1       localhost.localdomain  localhost

          ::1             localhost6.localdomain6 localhost6

    对以上内容的解释

    作用:hosts 文件是用来把主机名字映射到IP地址的方法,这种方法比较简单。但这种映射只是本地映射,也就是说每台机器都是独立的,所有的计算机都不能相互通过hostname来访问。

    格式: www.2cto.com 

       一般情况下hosts的内容关于主机名(hostname)的定义,每行为一个主机,每行由三部份组成,每个部份由空格隔开。其中#号开头的行做说明,不被系统解释。

       第一部份:网络IP地址;

       第二部份:主机名.域名,注意主机名和域名之间有个半角的点,比如 localhost.localdomain

       第二部份:主机名(主机名别名) ,其实就是主机名;

    注释:

       1)127.0.0.1 是回环地址,比如我们不想让局域网的其它机器看到我们测试的网络程序,就可以用回环地址来测试。

       2)为什么需要定义域名呢?其实理解也简单,比如我们有三台主机,每台做不同的事,一台做MAIL服务器,一台做FTP服务器,一台做SMB服务器,所以我们就可以这样来设计hostname; www.2cto.com 

       127.0.0.1 localhost.localdomain localhost

       192.168.1.2 ftp

       192.168.1.3 mail.localdomain mail

       192.168.1.4 smb.localdomin smb

    把这上面这个配置文件的内容分别写入每台机器的/etc/hosts内容中,这样这三台局域网的机器就可以通过hostname来访问了。也就是,在局域网中,主机名也是可以解析到IP上的,相当于DNS域名解析。

    对于主机名的修改有两种方式:hostname和/etc/sysconfig/network

[sql]

[root@think ~]# hostname  

thin   www.2cto.com 

[root@think ~]# hostname think 

[root@think ~]# hostname 

think 

    通过hostname 这个kernel变量来设置主机名只是临时的,下次重启系统时,此主机名将不会存在.hostname也可用于显示:hostname -i。如果要永久修改RedHat hostname,就修改/etc/sysconfig/network文件,将里面的HOSTNAME这一行修改成HOSTNAME=NEWNAME,其中NEWNAME就是你要设置的hostname。

/etc/hosts


IP地址 主机名/域名 别名

-第一部份:网络IP地址;
-第二部份:主机名或域名;
-第三部份:主机名别名;


主机名通常在局域网内使用,通过hosts文件,主机名就被解析到对应ip;

域名通常在internet上使用,但如果本机不想使用internet上的域名解析,这时就可以更改hosts文件,加入自己的域名解析。

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1       localhost localhost.localdomain

::1             localhost6.localdomain6 localhost6  --- 第三个字段是别名。

172.25.126.1    vmw1

172.25.126.10    vmw10  #aaaaaa 注释

2001::20c:29ff:fe0f:aa4a vm10v6 ----------- IPv6样式!没有掩码!

/etc/sysconfig/network

NETWORKING=yes

HOSTNAME=localhost.localdomain

PEERDNS=no

NISDOMAIN=bjlincase.cn.xxx.com

NETWORKING_IPV6=yes

GATEWAY=135.252.181.1

相关文章:

  • 【Linux】进程间通信--共享内存
  • 【open stack】openstack从入门到放弃
  • 【防火墙】linux打开防火墙的某几个端口|打开/关闭防火墙centos7
  • 【web.xml】web.xml文件的作用和servlet 、servlet-mapping 标签
  • 【JSON和JSONP】浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
  • 【JSP、servlet、SQL】JSP、servlet、SQL三者之间的数据传递
  • 【Jackson】Jackson和Jackson的用法实例分析
  • 【Spring】Spring 基础,用小例子来理解它(spring boot)
  • 【JQuery】jquery通过ajax方法获取json数据不执行success
  • 【jQuery】jQuery中$.get、$.post、$.getJSON和$.ajax用法的区别
  • 【json序列化】json的序列化、二进制序列化、JSON传输二进制数据方法
  • 【MVC\MVC\MVP】MVC、MVP、MVVM的区别
  • 【三范式】数据库三范式是什么?
  • 【SSH免密码登录】SSH Secure Shell Client用public key认证登录|linux 生成密钥
  • 【div Resize】Javascript中 非Window的DOM的onresize事件解决方案
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • CAP理论的例子讲解
  • ES学习笔记(12)--Symbol
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • leetcode-27. Remove Element
  • Otto开发初探——微服务依赖管理新利器
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • spring-boot List转Page
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 近期前端发展计划
  • 前端技术周刊 2019-02-11 Serverless
  • 前端学习笔记之观察者模式
  • 数据科学 第 3 章 11 字符串处理
  • 我的面试准备过程--容器(更新中)
  • 优化 Vue 项目编译文件大小
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (阿里云万网)-域名注册购买实名流程
  • (笔试题)合法字符串
  • (五)c52学习之旅-静态数码管
  • .mysql secret在哪_MySQL如何使用索引
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 使用ajax控件后如何调用前端脚本
  • .net 中viewstate的原理和使用
  • .NET学习教程二——.net基础定义+VS常用设置
  • :not(:first-child)和:not(:last-child)的用法
  • @RunWith注解作用
  • @SuppressWarnings(unchecked)代码的作用
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [1525]字符统计2 (哈希)SDUT
  • [2018-01-08] Python强化周的第一天
  • [Android]Android开发入门之HelloWorld
  • [Angular 基础] - 指令(directives)
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径