分类: 建站

再战DNS域名解析污染

再战DNS域名解析污染无评论

2016年12月23日 at 上午10:40分类:建站 阅读: 952 次

tips:

windows下清除dns缓存:

C:\Users\Administrator>ipconfig/flushdns
Windows IP 配置
已成功刷新 DNS 解析缓存。

openwrt下清除dns缓存:
root@Open743:~# /etc/init.d/dnsmasq restart

DNS域名请求和响应报文为明码UDP报文(端口为53),中间设备很容易对域名解析的返回结果进行修改,从而使你访问不到你想要访问的网站。

 

正文:

原来在用VPN时使用openwrt的dnsmasq将国外域名列表指向8.8.8.8的google服务器进行解析:
使用DNSMASQ解决OPENWRT的DNS解析问题

 

此种方法在使用VPN时正常,国外IP(含8.8.8.8)全走加密VPN,包括TCP、UDP,中间设备无法对内容进行修改。

 

但此种方法在使用SSR时发现失效,原因是没有将SSR的UDP隧道转发打开,SSR缺省只对TCP报文进行透明代理,UDP报文在中间被劫持修改

上图第一次ping是没打开隧道转发时的IP地址,返回一个随机的垃圾IP(意大利的地址),第二次是打开隧道转发后的正确IP。

 

隧道转发打开方式

openwrt上安装openwrt-ssr

打开UDP转发:

在WAN设置中取消“使用端局通告的DNS服务器”:

在DNS配置中设置“DNS转发”为“127.0.0.1#5300”:

按上述设置可以正确解析所有域名,但是有个问题,国内的域名也交给google去解析了,导致访问淘宝变成国际淘宝网站。

 

问题1:能不能不开启隧道,用UDP中继服务器中转DNS请求?

目前测试,从openwrt上发出的dns不理会UDP中继服务器设置,直接不走代理出去,但是局域网内其他的计算机发出的UDP报文会转发到UDP中继服务器。因此如果不开隧道,开UDP中继服务器,可以将局域网中的计算机的dns手动设置成8.8.8.8,也可以防止DNS污染:

 

问题2:如何设置使国内域名走国内DNS,国外走google的DNS?

在openwrt上打开UDP隧道,不要修改WAN和DNS配置,修改openwrt上/etc/dnsmasq.d/foreign_list.conf文件,将8.8.8.8改为127.0.0.1#5300

重启dnsmasq:

/etc/init.d/dnsmasq restart

 

另发现SS的openwrt客户端在域名污染情况下仍然可以正常使用,而SSR必须开隧道,具体原因待查。

【补充】

新版本SSR已经修复了在域名污染情况下无法使用的问题,已经不需要上述步骤。

新版SSR for OpenWRT地址:

http://github.com/ywb94/openwrt-ssr

编译ssr for openwrt 版本

编译ssr for openwrt 版本无评论

2016年12月21日 at 上午11:54分类:建站 阅读: 1,815 次

openwrt sdk 交叉编译

进入sdk目录:
ubuntu:~/t/openwrt/bin/ar71xx/OpenWrt-SDK-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64$
进入package目录
$ cd package/
获取源码:
$ git clone -b shadowsocksR https://github.com/harveyhu2012/openwrt-shadowsocks.git
$ git clone -b shadowsocksR https://github.com/harveyhu2012/openwrt-dist-luci.git
配置:
$ cd ..
$ make menuconfig
选择shadowsocksR-libev-spec、luci-app-shadowsocksR-spec
编译:
$ make V=99 -j2
生成后的ipk在:
openwrt/bin/ar71xx/OpenWrt-SDK-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/bin/ar71xx/packages/base

另一个版本
获取源码:
$ git clone -b shadowsocksR https://github.com/etnperlong/openwrt-shadowsocks.git
$ git clone -b shadowsocksR https://github.com/etnperlong/openwrt-dist-luci.git
注:在https://github.com/etnperlong/openwrt-shadowsocks上同步的是以前的shadowsocks-libev代码,如果要同步最新代码,需修改makefile文件:

到https://github.com/breakwa11/shadowsocks-libev网站找最新分支:

点红框链接进去,可以发现版本标识SHA:

修改:

PKG_SOURCE_VERSION:=d022e3177c4bbcd3a13dbb41aa3c2a7dbf50a672

版本号也升下级:

PKG_VERSION:=2.4.9

另外新版本依赖pcre,需修改:

DEPENDS:=$(3) +libpcre +libpthread

利用rsync进行网站之间的目录同步

利用rsync进行网站之间的目录同步无评论

2016年12月19日 at 下午2:24分类:建站 阅读: 498 次

功能:将服务端的目录定时同步到各个客户端
一、服务端(被同步端)配置
1、安装rsync
一般centos自带rsync,如果没有,用yum安装rsync以及xinetd
#yum install rsync xinetd
xinetd为守护进程,如果不安装xinetd也可以通过命令行启动rsync服务端
2、开启rsync
开启服务
#vim /etc/xinetd.d/rsync
disable = no //把disable = yes改成no
或者执行以下命令也能开启服务
#chkconfig rsync on
3、配置rsync
# vi /etc/rsyncd.conf (这个文件如果不存在自己创建)
#Global Settings
#以什么身份运行rsync
uid = root
gid = root
#不使用chroot
use chroot = no
#最大连接数
max connections = 20
#密码文件位置,认证文件设置,设置用户名和密码
secrets file = /etc/rsyncd.secrets
#指定rsync的日志文件,而不将日志发送给syslog
log file = /var/log/rsyncd.log
#指定rsync的pid文件
pid file = /var/run/rsyncd.pid
#指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock
lock file = /var/run/rsync.lock
comment = hello world
#欢迎信息文件名称和存放位置(此文件没有,可以自行添加)
#motd file = /etc/rsyncd.motd
#
# 这里是认证的模块名,在client端需要指定
[backup]
# 需要做镜像的目录
path = /var/www/default
# 授权帐号。认证的用户名,如果没有这行,则表明是匿名,多个用户用,分隔
auth users = rsync
# yes只读 值为NO意思为可读可写模式,数据恢复用NO
read only = yes
#允许访问的服务器IP
hosts allow = 192.168.3.128
#黑名单
hosts deny = *
# 允许列文件
list = true
# 可以忽略一些无关的IO错误
#ignore errors
#忽略的目录
#exclude = cache/111/ cache/222/

设置访问(认证)的用户名密码

# vi /etc/rsyncd.secrets
#用户名:密碼
rsync:111111
给文件正确的权限
# chown root:root /etc/rsyncd.secrets
# chmod 600 /etc/rsyncd.secrets #(必须是600)

 

4、启动

一般通过xinetd守护进程启动:

service xinetd restart

也可以通过命令行直接启动:

/usr/bin/rsync --daemon

 

二、客户端同步

先创建密码文件

#vi /etc/rsyncd.pas
111111
注意,客户端的密码文件只需要密码,而不需要用户名!密码和服务器一致

更改文件权限:
#chmod 0600 /etc/rsyncd.pas

执行同步命令:

rsync -vzrtopgu --progress --delete --password-file=/etc/rsyncd.pas   rsync@xxxx.net::backup /var/www/default

xxxx.net为服务端网站名称

rsync为登录用户名

backup 为指定同步的模块(服务端配置文件中的backup名称)

同步的本地路径为/var/www/default

-vzrtopg里的v是verbose,z是压缩传输,r是recursive,topg都是保持文件原有属性如属主、时间的参数。
u是只同步已经更新的文件,避免没有更新的文件被重复更新一次,不过要注意两者机器的时钟的同步。
–progress是指显示出详细的进度情况,
–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。

将命令放入crontab中可以定时和服务器目录同步:

#crontab -e

30 6 * * * /usr/bin/rsync -vzrtopgu --progress --delete --password-file=/etc/rsyncd.pas   rsync@xxxx.net::backup /var/www/default

每天6:30进行同步

linux系统备份与还原

linux系统备份与还原无评论

2016年12月10日 at 上午10:26分类:建站 阅读: 455 次

在使用Ubuntu之前,相信很多人都有过使用Windows系统的经历。如果你备份过Windows系统,那么你一定记忆犹新:首先需要找到一个备份工具(通常都是私有软件),然后重启电脑进入备份工具提供的软件环境,在这里备份或者恢复Windows系统。Norton Ghost是备份Windows系统时经常使用的备份工具。

在备份Windows系统的时候你可能想过,我能不能把整个C盘都放到一个ZIP文件里去呢。这在Windows下是不可能的,因为在Windows中有很多文件在它们运行时是不允许拷贝或覆盖的,因此你需要专门的备份工具对Windows系统进行特殊处理。

和备份Windows系统不同,如果你要备份Ubuntu系统(或者其它任何Linux系统),你不再需要像Ghost这类备份工具。事实上,Ghost 这类备份工具对于Linux文件系统的支持很糟糕,例如一些Ghost版本只能完善地支持Ext2文件系统,如果你用它来备份Ext3文件系统,你可能会丢失一些宝贵的数据。

1. 备份系统

我该如何备份我的Ubuntu系统呢?很简单,就像你备份或压缩其它东西一样,使用TAR。和Windows不同,Linux不会限制root访问任何东西,你可以把分区上的所有东西都扔到一个TAR文件里去!

首先成为root用户:
$ sudo su

然后进入文件系统的根目录(当然,如果你不想备份整个文件系统,你也可以进入你想要备份的目录,包括远程目录或者移动硬盘上的目录):
# cd /

下面是我用来备份系统的完整命令:
# tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

让我们来简单看一下这个命令:

“tar”当然就是我们备份系统所使用的程序了。

“cvpfz”是tar的选项,意思是“创建档案文件”、“保持权限”(保留所有东西原来的权限)、“使用gzip来减小文件尺寸”。

“backup.gz”是我们将要得到的档案文件的文件名。

“/”是我们要备份的目录,在这里是整个文件系统。

在档案文件名“backup.gz”和要备份的目录名“/”之间给出了备份时必须排除在外的目录。有些目录是无用的,例如“/proc”、“ /lost+found”、“/sys”。当然,“backup.gz”这个档案文件本身必须排除在外,否则你可能会得到一些超出常理的结果。如果不把“ /mnt”排除在外,那么挂载在“/mnt”上的其它分区也会被备份。另外需要确认一下“/media”上没有挂载任何东西(例如光盘、移动硬盘),如果有挂载东西,必须把“/media”也排除在外。

有人可能会建议你把“/dev”目录排除在外,但是我认为这样做很不妥,具体原因这里就不讨论了。

执行备份命令之前请再确认一下你所键入的命令是不是你想要的。执行备份命令可能需要一段不短的时间。

备份完成后,在文件系统的根目录将生成一个名为“backup.tgz”的文件,它的尺寸有可能非常大。现在你可以把它烧录到DVD上或者放到你认为安全的地方去。

在备份命令结束时你可能会看到这样一个提示:'tar: Error exit delayed from previous errors',多数情况下你可以忽略它。

你还可以用Bzip2来压缩文件,Bzip2比gzip的压缩率高,但是速度慢一些。如果压缩率对你来说很重要,那么你应该使用Bzip2,用“j”代替命令中的“z”,并且给档案文件一个正确的扩展名“bz2”。完整的命令如下:
# tar cvpjf backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys /

2. 恢复系统

在进行恢复系统的操作时一定要小心!如果你不清楚自己在做什么,那么你有可能把重要的数据弄丢,请务必小心!

接着上面的例子。切换到root用户,并把文件“backup.tgz”拷贝到分区的根目录下。

在Linux中有一件很美妙的事情,就是你可以在一个运行的系统中恢复系统,而不需要用boot-cd来专门引导。当然,如果你的系统已经挂掉不能启动了,你可以用Live CD来启动,效果是一样的。你还可以用一个命令把Linux系统中的所有文件干掉,当然在这里我不打算给出这个命令!

 

 

使用下面的命令来恢复系统:
# tar xvpfz backup.tgz -C /

如果你的档案文件是使用Bzip2压缩的,应该用:
# tar xvpfj backup.tar.bz2 -C /

注意:上面的命令会用档案文件中的文件覆盖分区上的所有文件。

执行恢复命令之前请再确认一下你所键入的命令是不是你想要的,执行恢复命令可能需要一段不短的时间。

恢复命令结束时,你的工作还没完成,别忘了重新创建那些在备份时被排除在外的目录:
# mkdir proc
# mkdir lost+found
# mkdir mnt
# mkdir sys
等等

当你重启电脑,你会发现一切东西恢复到你创建备份时的样子了!

centos、ubuntu下开启BBR

centos、ubuntu下开启BBR无评论

2016年12月9日 at 下午1:18分类:建站 阅读: 625 次

BBR 目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 效果并不比速锐差

BBR算法科普:http://blog.csdn.net/dog250/article/details/52830576

最新 4.9.0-rc8 内核已支持 tcp_bbr 下面简单讲述如何开启

VPS主机必须为KVM类型

 

centos:

1、一键安装脚本(支持centos6、7)

#wget -O- http://iytc.net/tools/install_bbr_centos.sh | bash

Now I will replace the system kernel to 4.9.0-rc8...
Start installing
Retrieving http://soft.wellphp.com/kernels/x86_64/kernel-ml-4.9.0-rc8.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:kernel-ml ########################################### [100%]

//此处时间较长,请耐心等待

Checking if the installtion is ok

//centos 6下出现此信息为正常
ls: cannot access /etc/grub2.cfg: No such file or directory

Installation is completed, now you can reboot the system.
You should check BBR after the rebooting using command:

sysctl -a|grep congestion_control

安装结束之后,重启:

reboot
重启之后验证是否已经成功:

# uname -a
Linux iytc 4.9.0-rc8.el6.x86_64 #1 SMP Fri Dec 9 08:15:49 CST 2016 x86_64 x86_64 x86_64 GNU/Linux

# sysctl -a|grep tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr

如果不幸失败,可以通过VNC修改启动项到老的内核。

2、分步安装

查看当前内核

#rpm -qa|grep kernel

dracut-kernel-004-388.el6.noarch
kernel-2.6.32-573.3.1.el6.x86_64
kernel-2.6.32-573.el6.x86_64
kernel-firmware-2.6.32-573.3.1.el6.noarch

 

使用rpm -e 包全名 --nodeps 进行强制删除

 

然后rpm -ivh 地址 进行安装:

(Centos6/RedHat6) : http://elrepo.org/people/ajb/devel/kernel-ml/el6/x86_64/RPMS/kernel-ml-4.9.0-0.rc8.el6.elrepo.x86_64.rpm

(Centos7/RedHat7) : http://elrepo.org/people/ajb/devel/kernel-ml/el7/x86_64/RPMS/kernel-ml-4.9.0-0.rc8.el7.elrepo.x86_64.rpm

#rpm -ivh http://elrepo.org/people/ajb/devel/kernel-ml/el6/x86_64/RPMS/kernel-ml-4.9.0-0.rc8.el6.elrepo.x86_64.rpm --force

 

 

 

Ubuntu:

1、下载最新内核,最新内核查看这里

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9-rc8/linux-image-4.9.0-040900rc8-generic_4.9.0-040900rc8.201612051443_amd64.deb
2、安装内核

dpkg -i linux-image-4.9.0*.deb
3、删除其余内核

dpkg -l|grep linux-image
apt-get purge 旧内核
4、更新 grub 系统引导文件并重启

update-grub
reboot
5、开启bbr

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
保存生效sysctl -p
执行sysctl net.ipv4.tcp_available_congestion_control
如果结果中有bbr, 则证明你的内核已开启bbr
执行lsmod | grep bbr, 看到有 tcp_bbr 模块即说明bbr已启动