【linux】主机名被改为bogon原理分析|修改主机名hostname的方法

目录

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

修改主机名的方法

1、临时修改,重启失效

2、永久生效


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有这样一段代码

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

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。

链接:主机名由localhost变成bogon是怎么回事,怎样变回localhost这个名字? - 知乎

(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

修改主机名的方法

1、临时修改,重启失效

hostname yourhostname

2、永久生效

第一步:

1. Redhat / CentOS / Fedora系列

  1. vi /etc/sysconfig/network

输入以下:

  1. HOSTNAME=yourhostname

保存后执行以下:

    保险起见: reboot

  1. hostname

2. Debian / Ubuntu系列 (发现centos 用这个可以)

  1. vi /etc/hostname

写入

把里面的主机名改为你相改的主机名

保存后执行以下:

  1.   保险起见: reboot
  2. hostname
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值