前言最近在vultr新建了一个新加坡的 VPS ，由于我的某些需求，需要使用 VPS 访问某个域名下的资源。但很不幸，每次我尝试去连接这个资源的都是，都是提示域名解析失败诸如此类的错误，经过检查，我发现是 vultr 自带的 DNS 的问题造成的。在修改这个 DNS 的过程中，我尝试去修改 /etc/resolv.conf 文件，但是每当机器重启， DNS 又会自动变为原来的那个很烂的 DNS ，经过一翻寻找，找到了官方的这篇文章。正文对于使用 DHCP 的用户来说，很多时候你需要修改/etc/resolv.conf来使用其他的 DNS 服务器。那么，经过了一段时间（或者是经过了机器重启）之后，你会发现你所修改的/etc/resolv.conf文件会被恢复为原来的样子。以下教程讲述了三个阻止 DHCP 修改/etc/resolv.conf文件的方法，适用于 Debian 或者是 Ubuntu。把接口设置为静态在一台云 VPS 上，我十分不建议你使用这种方式。 如果使用这种方式，你可能会发现重启的过程（直到你可以通过 SSH 连接）会更加长一些。 首先，我们需要直到我们的 IP 地址，网络掩码以及网关地址。使用下面的命令：ifconfig | grep "inet addr" | head -n 1 | awk '{print $2, $4}' 译者注：Debian 8 的可能是下面这条命令ifconfig | grep "inet Adresse" | head -n 1 | awk '{print $2, $4}' 这会显示出服务器的 IP 地址以及网络掩码。让我们来看一看输出addr:1.2.3.4 Mask:255.255.254.0 译者注：Debian 8 的可能是下面这条输出Adresse:1.2.3.4 Maske:255.255.254.0 服务器的 IP 地址就是1.2.3.4，子网掩码就是255.255.254.0运行下面这条命令来获得网关地址。netstat -rn | grep '^0.0.0.0' | awk '{print $2}' 在这个例子中，我们假定网关地址就是 1.2.3.1现在我们已经有了IP/子网掩码/网关地址了，修改/etc/network/interfaces文件vim /etc/network/interfaces 作出下面的修改# Comment out this line # iface eth0 inet dhcp # Add these contents iface eth0 inet static address 1.2.3.4 mask 255.255.254.0 gateway 1.2.3.1 请记住，你必修将上面的IP等数据改为你服务器实际的数据。保存并关闭，然后重启 VPS 。写保护你的 DNS 服务器通过修改/etc/resolv.conf来修改你的 DNS 服务器。一旦你作出了修改，写保护这个文件chattr +i /etc/resolv.conf 这个+i的选项就是为文件/etc/resolv.conf添加了写保护，因此任何人都不可以修改他，甚至是 root 用户也不行！如果你需要取消写保护，使用下面的命令：chattr -i /etc/resolv.conf 使用 DHCP 钩子这是我最推荐使用的方法。修改/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate文件。vim /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate 作出以下的修改#!/bin/sh make_resolv_conf(){ : } 保存并退出给文件nodnsupdate添加可执行权限chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate 重启系统，现在你就可以任性地修改/etc/resolv.conf文件而且不会担心被回滚了。
一、安装需要使用的软件sudo apt-get install squashfs-tools genisoimage #装入 squashfs文件系统处理工具以及 ISO制作工具 sudo modprobe squashfs #加载 squashfs模块 二、提取光盘内容1、创建一个livecd文件夹作为工作目录mkdir ~/livecd 2、挂载ubuntu光盘镜像cd ~/livecd mkdir mnt sudo mount -o loop ubuntu-14.04-desktop-i386.iso mnt 3、展开ubuntu镜像文件中的内容到 mycd 目录mkdir mycd sudo cp -Ra mnt/* mycd 三、解压squashfs系统文件1、挂载 squashfs 文件系统mkdir squashfs sudo mount -t squashfs -o loop mnt/casper/filesystem.squashfs squashfs 2、展开 squashfs 文件系统中的内容到 myedit 目录下mkdir myedit sudo cp -Ra squashfs/* myedit/(这一步需要较长的时间) 四、配置设置自己的系统1、复制resolv.conf到系统目录sudo cp /etc/resolv.conf myedit/etc/ 2、hosts复制一份过去sudo cp /etc/hosts myedit/etc/ 3、替换apt源rm /home/yourname/livecd/myedit/etc/apt/sources.list cp /etc/apt/source.list /home/yourname/livecd/myedit/etc/apt apt-get update 4、在自己系统上挂载一些重要的目录sudo mount --bind /dev/ edit/dev sudo chroot myedit mount -t proc none /proc mount -t sysfs none /sys mount -t devpts none /dev/pts 五、安装卸载系统中的软件，配置以达到自己的要求1、安装卸载软件cd ~livecd/ sudo chroot myedit sudo apt-get install 软件名 sudo apt-get remove 软件名 2、进行清理sudo apt-get autoremove sudo apt-get clean 3、记得卸载刚才加入的挂载，退出chroot环境umount /proc umount /sys umount /dev/pts exit sudo umount myedit/dev 六、生成自己的ubuntu系统镜像playubuntu.iso1、重新压缩系统文件到filesystem.squashfssudo rm mycd/casper/filesystem.squashfs //删除原有的filesystem.squashfs sudo mksquashfs myedit mycd/casper/filesystem.squashfs //生成自己的filesystem.squashfs 2、创建playubuntu.isocd mycd sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../playubuntu.iso ~/livecd/mycd/ (这是一条命令) 七、完成后我们可以在virtualbox虚拟机里测试了