使用dnsmasq解决openwrt的DNS解析问题

使用dnsmasq解决openwrt的DNS解析问题无评论

2016年8月31日 at 下午4:41分类:其他 阅读: 1,147 次

在以前的《一键安装PPTP服务》中,用google的dns(8.8.8.8)来替代了ISP提供的dns服务器,因为如果不替代,运营商dns会将google等被屏蔽网站指向一个不正确的地址,即使是通过VPN也无法正确访问。

但是采用国外dns后发现了一个问题,一些国内网站在dns解析时会提供一个国外的地址,比如访问淘宝,会出现美国淘宝的页面,访问速度也会大大降低。

在openwrt上集成了dnsmasq,这是一个小型的dns代理缓存软件,它可以将特定的域名发送给不同的dns服务器进行解析,可在/etc/dnsmasq.conf文件中进行配置,比如将淘宝域名taobao.com交给国内ISP的dns(210.21.196.6)进行解析,添加如下语句到/etc/dnsmasq.conf文件即可:

server=/taobao.com/210.21.196.6

要解决dns解析问题,有 两种思路:

1、获取国外主流的、被屏蔽的域名列表(GFWLIST),保证被墙网站走国外DNS解析;

2、获取国内主流站点域名列表(ChinaList),保证List中的国内域名走国内DNS解析;

国内主流列表:

https://github.com/felixonmars/dnsmasq-china-list

accelerated-domains.china

将文件114.114.114.114替换为自己的ISP的dns

国外主流列表:

foreign_list

 

应用:

修改 /etc/dnsmasq.conf  ,在最后加入  conf-dir=/etc/dnsmasq.d ,新建并进入目录  /etc/dnsmasq.d ,下载 accelerated-domains.china.conf 和 foreign_list.conf 两个文件后根据需要分别复制两个文件到  /etc/dnsmasq.d 目录。

如果缺省走国内ISP的DNS,则只需拷贝 foreign_list.conf 文件,如果缺省走国外DNS,则只需拷贝 accelerated-domains.china.conf即可。

注意:如果缺省走国内DNS,需要将PPTP的如下红框选项去掉,避免PPTP连接后使用国外的DNS:

 

拷贝后重启dnsmasq立即生效或直接重启路由器:

/etc/init.d/dnsmasq restart

 

openwrt配置chnroutes路由对国内外流量分流

openwrt配置chnroutes路由对国内外流量分流无评论

2016年8月30日 at 下午11:17分类:其他 阅读: 951 次

Openwrt配置PPTP连接VPN server,一般以VPN server作为网关,所有流量经过VPN,会增加服务器负担,另外绕一圈回来访问国内网站速度也会变慢,因此需要对国内和国外流量进行分流,国内流量走本地的PPPOE拨号网关,国外流量走VPN 网关。

chnroutes 路由表可以实现此需求:
项目地址:https://github.com/fivesheep/chnroutes
原理:
此网址http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest包含了所有分配到各个国家的 IP 段,每天自动更新,chnroutes 路由表根据此数据进行分析,将国内网段提取出来,可使得在访问国内地址时不经过 VPN。

CN表示国内网段,如下图1.0.1.0、1.0.2.0等都属于中国网段,256/512表示掩码位数:

根据此表,可以将CN网段的走本地的PPPOE拨号网关,其他网段缺省走VPN 网关。

 

chnroutes的应用:

  • 下载 chnroutes.py
  • 从终端进入下载目录, 执行python chnroutes.py -p linux, 执行完毕之后同一目录下将生成两个新文件'ip-pre-up'和'ip-down'.
  • 把ip-pre-up拷贝到/etc/ppp/ip-up.d目录,ip-down拷贝到/etc/ppp/ip-down.d目录.

 

由于原版的chnroutes 要用python生产,我用了一个简单现成的:

https://github.com/sabersalv/freedom-routes

下载如下文件进行操作:

https://raw.githubusercontent.com/sabersalv/freedom-routes/dist/linux.tar.gz

解压后主要修改routes-up.sh文件,原始文件很简单,先取网关地址,然后将国内网段指向网关:

#!/bin/sh

export PATH="/bin:/sbin:/usr/sbin:/usr/bin"
gateway=$(ip route show 0/0 | grep via | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+')

ip -batch - <<EOF
route add 1.0.1.0/24 via $gateway
route add 1.0.2.0/23 via $gateway

...

 

这个脚本用在Openvpn没有问题,但是用在PPTP就问题来了:

一般此脚本放在/etc/ppp/ip-up时进行调用,当PPPOE拨号完成时增加国内路由,其他缺省路由指向VPN(如Openvpn)网关,这样如果用Openvpn两者没有冲突,但是如果是PPTP就有问题,因为PPTP也需要调用PPP模块,当PPPTP拨号成功后也会调用/etc/ppp/ip-up,这样有可能会将国内路由指向VPN网关,造成混乱。另外还发现,当PPPOE断线重连时,缺省网关有时会变成PPPOE网关而不是VPN网关,造成无法访问国外网站。

根据上面的问题,对routes-up.sh进行了修改,首先检查网关是否正确,如果存在VPN网关,则强制使用VPN网关作为缺省网关;其次只对PPPOE接口上的网关增加国内路由,并且增加重复检查,避免重复添加路由:

#!/bin/sh

export PATH="/bin:/sbin:/usr/sbin:/usr/bin"

#调试信息,时间记录
CURTIME=`date '+%Y-%m-%d %H:%M:%S'`

#当前缺省网关
gateway=`ip route show | grep '^default' | sed -e 's/default via \([^ ]*\).*/\1/'`

echo ${CURTIME}_GW_$gateway >> /tmp/myvpn_oldgw

#172.16.36.1为VPN网关,如当前网关不是VPN网关,则检查PPTP拨号是否成功,如果成功则修改为缺省网关
if [ "$gateway" != "172.16.36.1" ]; then
pptpip=`ifconfig pptp-vpn |grep 'inet add'|awk -F ":" '{print $2}'|awk '{print $1}'`
echo ${CURTIME}_pptpip_$pptpip>> /tmp/myvpn_oldgw
mycount=`echo $pptpip|grep '172.'|wc -l`
if [ $mycount -gt 0 ];then
route delete default
route add default gw 172.16.36.1
echo ${CURTIME}_ChangGW_$mycount>> /tmp/myvpn_oldgw
fi
fi

#检查PPPOE拨号是否成功

pppoeip=`ifconfig pppoe-wan |grep 'inet add'|awk -F ":" '{print $2}'|awk '{print $1}'`
echo ${CURTIME}_pppoeip_$pppoeip >> /tmp/myvpn_oldgw
if [ -z "$pppoeip" ]; then
exit 0
fi

#路由重复性检查

routeflag=`route -n | head -n 10|grep '1.0.1.0'|wc -l`
if [ $routeflag -gt 0 ];then
exit 0
fi

 

#添加国内网段到PPPOE网关
echo ${CURTIME}_ADDROUT_$pppoeip >> /tmp/myvpn_oldgw

ip -batch - <<EOF
route add 1.0.1.0/24 via $pppoeip
route add 1.0.2.0/23 via $pppoeip

...

 

修改完成后将文件放在/etc/ppp/ip-up.d目录,修改文件为可执行即可。

提醒:openwrt需要安装ip模块(支持ip命令)

 

手机通过小米盒子在电视上看youtube

手机通过小米盒子在电视上看youtube无评论

2016年8月30日 at 上午11:24分类:其他 阅读: 882 次

首先在路由器openwrt上开PPTP VPN,保证能否翻墙成功

手机(荣耀5X,安装谷歌服务框架和google play市场)和小米盒子在同一局域网,手机上先安装youtube,再安装allconnect。

打开allconnect,找到小米盒子:

有dlna和airplay两个图标,随便选一个,选择后可以把手机上的视频和照片投射到电视上。

打开youtube,选一个视频:

点分享图标“”,分享列表中选allconnect:

然后会自动转至allconnect,开始在电视上播放影片:

centos安装openvpn server

centos安装openvpn server无评论

2016年8月29日 at 下午9:59分类:建站 阅读: 549 次

一、安装程序

# yum install openvpn easy-rsa

二、配置

# 修改vars文件
cd /usr/share/easy-rsa/2.0/
vim vars
# 修改注册信息,比如公司地址、公司名称、部门名称等。
export KEY_COUNTRY="CN"
export KEY_PROVINCE="Shandong"
export KEY_CITY="Qingdao"
export KEY_ORG="MyOrganization"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
# 初始化环境变量
source vars
# 清除keys目录下所有与证书相关的文件
# 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/2.0/keys目录里
./clean-all
# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)
./build-ca
# 为服务端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key-server server
# 每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
# 为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key client1
./build-key client2
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
./build-dh
# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
openvpn --genkey --secret keys/ta.key

三、服务器配置

# 在openvpn的配置目录下新建一个keys目录
mkdir /etc/openvpn/keys
# 将需要用到的openvpn证书和密钥复制一份到刚创建好的keys目录中
cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/
# 复制一份服务器端配置文件模板server.conf到/etc/openvpn/
cp /usr/share/doc/openvpn-2.3.11/sample/sample-config-files/server.conf /etc/openvpn/
# 查看server.conf里的配置参数
grep '^[^#;]' /etc/openvpn/server.conf
# 编辑server.conf
vim /etc/openvpn/server.conf
port 1194
# 改成tcp,默认使用udp,如果使用HTTP Proxy,必须使用tcp协议
proto tcp
dev tun
# 路径前面加keys,全路径为/etc/openvpn/keys/ca.crt
ca keys/ca.crt
cert keys/server.crt
key keys/server.key # This file should be kept secret
dh keys/dh2048.pem
# 默认虚拟局域网网段,不要和实际的局域网冲突即可
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# 10.0.0.0/8是我这台VPN服务器所在的内网的网段,读者应该根据自身实际情况进行修改
push "route 10.0.0.0 255.0.0.0"
# 可以让客户端之间相互访问直接通过openvpn程序转发,根据需要设置
client-to-client
# 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
# OpenVPN的状态日志,默认为/etc/openvpn/openvpn-status.log
status openvpn-status.log
# OpenVPN的运行日志,默认为/etc/openvpn/openvpn.log
log-append openvpn.log
# 改成verb 5可以多查看一些调试信息
verb 5

四、配置防火墙

# 开启路由转发功能
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sysctl -p
# 配置防火墙,别忘记保存
iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
service iptables save
# 启动openvpn并设置为开机启动
service openvpn start
chkconfig openvpn on

五、客户端配置

# 复制一份client.conf模板命名为client.ovpn
cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/client.conf client.ovpn
# 编辑client.ovpn
vim client.ovpn
client
dev tun
# 改为tcp
proto tcp
# OpenVPN服务器的外网IP和端口
remote 203.195.xxx.xxx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
# client1的证书
cert client1.crt
# client1的密钥
key client1.key
ns-cert-type server
# 去掉前面的注释
tls-auth ta.key 1
comp-lzo
verb 3

1)windows客户端配置

客户端系统:Windows7 64位

内网IP:172.16.4.4

OpenVPN版本:OpenVPN 2.3.3 Windows 64位

1、下载安装OpenVPN

OpenVPN 2.3.3 Windows 32位 安装文件:

http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.3-I002-i686.exe

OpenVPN 2.3.3 Windows 64位 安装文件:

http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.3-I002-x86_64.exe

2、配置client

将OpenVPN服务器上的client.ovpn、ca.crt、client1.crt、client1.key、ta.key上传到Windows客户端安装目录下的config文件夹(C:\Program Files\OpenVPN\config)

3、启动OpenVPN GUI

在电脑右下角的openvpn图标上右击,选择“Connect”。正常情况下应该能够连接成功,分配正常的IP

一键安装PPTP服务

一键安装PPTP服务无评论

2016年8月28日 at 下午12:12分类:建站 阅读: 480 次

一、Centos上安装PPTP服务器
1、先搞定yum源

我的vultr主机yum源错误,更改/etc/yum.repos.d下的rpmforge.repo文件

[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
mirrorlist = http://mirrorlist.repoforge.org/el6/mirrors-rpmforge

2、下载安装脚本

wget http://mirrors.linuxeye.com/scripts/vpn_centos.sh

chmod +x ./vpn_centos.sh

./vpn_centos.sh

 

如果拨入后无法访问internet,在/etc/sysconfig/iptables中加入

-A FORWARD -s 172.16.36.0/24 -j ACCEPT

-A POSTROUTING -s 172.16.36.0/24 -o eth0 -j MASQUERADE

KVM中填eth0,openvz填venet0

二、openwrt上设置PPTP拨号
在“网络”-“接口”上增加一个pptp接口:

配置接口:

连上后会有IP地址显示。

 

修改dns配置(防止原来的DNS对境外网站屏蔽):

a.创建 /etc/config/sec_resolv.conf

vim /etc/config/sec_resolv.conf

  填入以下 DNS Servers:

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 208.67.222.222


  b.编辑 /etc/config/dhcp

vim /etc/config/dhcp

  找到 option resolvfile 选项,将option 'resolvfile' '/tmp/resolv.conf.auto'替换为:

option resolvfile '/etc/config/sec_resolv.conf'