Quantcast
Channel: 看得透又看得远者prevail. ppt.cc/flUmLx ppt.cc/fqtgqx ppt.cc/fZsXUx ppt.cc/fhWnZx ppt.cc/fnrkVx ppt.cc/f2CBVx
Viewing all 20537 articles
Browse latest View live

鹊桥仙·七夕

$
0
0


宋代:苏轼
缑山仙子,高清云渺,不学痴牛騃女。凤箫声断月明中,举手谢时人欲去。
客槎曾犯,银河波浪,尚带天风海雨。相逢一醉是前缘,风雨散、飘然何处?

送魏二

$
0
0


唐代:王昌龄
醉别江楼橘柚香,江风引雨入舟凉。
忆君遥在潇湘月,愁听清猿梦里长。

重别周尚书

$
0
0


南北朝:庾信
阳关万里道,不见一人归。
惟有河边雁,秋来南向飞.

丹阳送韦参军

$
0
0


唐代:严维
丹阳郭里送行舟,一别心知两地秋。
日晚江南望江北,寒鸦飞尽水悠悠。

送人游吴

$
0
0


唐代:杜荀鹤
君到姑苏见,人家尽枕河。
古宫闲地少,水巷小桥多。
夜市卖菱藕,春船载绮罗。
遥知未眠月,乡思在渔歌。

别薛华

$
0
0


唐代:王勃
送送多穷路,遑遑独问津。
悲凉千里道,凄断百年身。
心事同漂泊,生涯共苦辛。
无论去与住,俱是梦中人。

送人

$
0
0


唐代:杜牧
鸳鸯帐里暖芙蓉,低泣关山几万重。
明镜半边钗一股,此生何处不相逢。

蓼岸风多橘柚香

$
0
0


五代:孙光宪
蓼岸风多橘柚香,江边一望楚天长。片帆烟际闪孤光。
目送征鸿飞杳杳,思随流水去茫茫。兰红波碧忆潇湘。

送韦城李少府

$
0
0


唐代:张九龄
送客南昌尉,离亭西候春。
野花看欲尽,林鸟听犹新。
别酒青门路,归轩白马津。
相知无远近,万里尚为邻

落日古城角

$
0
0


宋代:辛弃疾

落日古城角,把酒劝君留。长安路远,何事风雪敝貂裘。散尽黄金身世,不管秦楼人怨,归计狎沙鸥。明夜扁舟去,和月载离愁
功名事,身未老,几时休。诗书万卷,致身须到古伊周。莫学班超投笔,纵得封侯万里,憔悴老边州。何处依刘客,寂寞赋登楼。

使用Capistrano部署Rails应用

$
0
0
Capistrano是一个远程服务器自动化工具,使用Ruby编写。
它是一个通用类型的工具,并非专为Rails设计,但对Rails支持很好

优点

  • 无需对服务器进行任何配置
  • 一键部署、回滚
  • 易于扩展,可方便地添加自定义任务

基本原理

预先定义一系列任务(本质上都是shell脚本),然后通过ssh在远程服务器上执行任务。
使用钩子定义任务的执行时间、顺序。
可创建多套部署方案,capistrano中称为stage,每个stage有一个单独的配置文件。

基本流程

假定服务器上使用Nginx + Passenger + Rvm运行Rails应用,具体安装配置参见各软件文档。
部署Rails应用的基本流程是:
  1. 将代码推送到远程仓库
  2. 本地执行capistrano部署命令
  3. capistrano通过ssh连接远程服务器,从远程代码仓库拉取代码,然后执行安装依赖、编译资源文件、迁移数据库等任务
  4. 重启passenger使新代码生效

基本要求

服务器

  • 有一个部署用的用户,该用户应对部署目录有读写权限,且有执行rvm, passenger-config等命令的权限
  • 可连接远程代码仓库(不要求部署用户有拉取权限)

本地

  • 能通过ssh密钥以部署用户身份登录远程服务器
  • 对远程代码仓库有拉取权限

安装

只需在本地安装capistrano
在项目的Gemfile中加入以下内容:
group :developmentdo
# deploy
gem 'capistrano-rails', '~> 1.1.5'
gem 'capistrano-rvm'
end
执行bundle install安装新依赖

本地初始化

bundle exec cap install STAGES=development,production
初始化后生成以下文件结构
├── Capfile# 控制插件、任务的加载
├── config
│ ├── deploy # 不同stage的配置文件
│ │ ├── development.rb
│ │ └── production.rb
│ └── deploy.rb # 全局配置,各stage共用
└── lib
└── capistrano
└── tasks # 自定义任务的存放位置
若初始化时不指定STAGES,默认创建staging, production两个stage。

配置

  1. 加载rails, rvm插件
    Capfile中加入
    require'capistrano/rails'
    require'capistrano/rvm'
  2. 修改全局配置config/deploy.rb
    # 应用名称
    set :application, 'liveneeq'

    # 远程仓库地址
    set :repo_url, 'git@git.thecampus.cc:yang/liveneeq2.git'

    # 服务器端部署目录。可使用fetch(:xxx)获取已设置的变量
    set :deploy_to, "/data/app/www/#{fetch(:application)}"

    # 在不同版本间共享的文件
    set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml')

    # 在不同版本间共享的目录
    set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets',
    'vendor/bundle', 'public/system', 'public/uploads')

    # ruby版本
    set :rvm_ruby_version, '2.2.2'

    # 默认Rails.env会等于stage的名称而非始终production,导致代码中判断模式错误。此处强制所有stage都为production模式
    set :stage, :production
  3. 修改各个stage的配置
    我们使用development, production两个stage,development部署dev分支到开发/测试服务器,production部署master分支到生产服务器
    # config/deploy/development.rb:

    # 远程服务器的地址、用户、角色
    # 可配置多台服务器
    server '119.29.107.35', user:'ubuntu', roles:%w(app db web)

    # 要部署的分支
    set :branch, 'dev'
    # config/deploy/production.rb

    # 远程服务器的地址、用户、角色
    # 可配置多台服务器
    server '119.29.107.35', user:'ubuntu', roles:%w(app db web)

    # 要部署的分支
    set :branch, 'master'

服务器端初始化

  1. 创建部署目录
  2. 在部署目录下创建shared子目录,里面添加config/deploy.rb中配置的linked_files
  3. 创建数据库

Capistrano命令

# 查看可用任务
bundle exec cap -T

# 部署
bundle exec cap STAGE_NAME deploy

# 回滚
bundle exec cap STAGE_NAME deploy:rollback
  • 执行任何任务都需要指定stage名称
  • 使用bundle exec执行cap命令以避免不可预知的风险

自定义任务

集成bower

若项目中使用bower管理前端依赖,需自行添加任务安装bower依赖
创建lib/capistrano/tasks/bower.rake文件,内容如下:
namespace :bowerdo
desc 'Install bower dependencies'
task :installdo
on roles(:web) do |host|
within release_path do
# 安装依赖
execute :bower, :install
# 清理无用包
execute :bower, :prune
info "Bower dependencies installed successfully on #{host}"
end
end
end
end
然后在config/deploy.rb末尾加入
before :'deploy:compile_assets', :'bower:install'

部署后重启passenger

部署新版本后需要重启passenger才能使新代码生效,可通过capistrano-passenger插件实现部署完成后自动重启,也可自行添加一个重启任务:
创建lib/capistrano/tasks/restart.rb,内容如下:
namespace :passengerdo
desc 'Restart passenger app'
task :restartdo
on roles(:app), in::sequence, wait:5, limit:2do |host|
# 若使用的是passenger企业版,可添加参数--rolling-restart以实现无缝重启
execute :'passenger-config', 'restart-app', fetch(:deploy_to), '--ignore-app-not-running'
info "Restart passenger successfully on #{host}"
end
end
end
然后在conig/deploy.rb末尾加入
after :'deploy:publishing', :'passenger:restart'

不足之处

  1. 非完全自动化,只能说是半自动,因为需要本地执行部署命令
  2. 完全依赖本地环境,配置在本地,执行命令在本地,而且要求本地用户能ssh登录服务器
曾经使用git hook + shell脚本实现过一种部署方案,指定的分支有更新(主动推送到远程仓库或在GitLab上接受合并请求)时就自动部署。
完全自动化、完全不依赖本地环境,但服务器端的配置略麻烦。
两种方案各有优劣,或许结合一下会更好?

部署Node应用程序选择Heroku.com平台还是Now.sh平台?

$
0
0
随着Node.js的不断流行,新教程层出不穷,教程序员如何编写服务器端Java应用程序和API。本文将介绍两大用于部署Node应用程序的项目:Now.sh和Heroku。解释如何将代码部署到上述两个平台,在监控选项、易用性、提供的功能以及免费托管计划方面各有哪些利弊。
用Heroku进行部署
为了能够将应用程序部署到Heroku,程序员必须在Heroku上注册并为机器安装Heroku CLI。
开始之前,需要向Procfile添加一些代码。因为,Heroku将利用这个文件来确定如何执行上传的代码。
如果将下面的代码添加到文件中,Heroku就知道应该执行什么命令来启动应用程序:
一旦完成,请尝试通过从终端输入heroku login的方式登陆,Heroku会要求输入登录凭证。
接下来,导航到项目的根目录并输入命令:heroku create。这将在Heroku上创建一个应用程序,该应用程序已准备好接收项目的源代码。Heroku上的应用程序名称是随机创建的。
要将代码部署到Heroku,只需使用git push heroku master。程序员可以使用heroku open命令来访问应用程序,这将打开生成的URL。
推动对Heroku的更改
遵循正常的Github流程可以推动更改:
有用的Heroku命令
要确保至少有一个应用程序实例在运行:heroku ps:scale web = 1
因为正在使用免费平台,所以不可能扩展应用程序。但是,可以缩减比例,因此不运行的应用程序实例:heroku ps:scale web = 0。
按照Heroku生成的时间顺序查看最新的日志(流):heroku logs --tail
可以只显示应用程序日志。应用程序日志是代码中console.log()语句的输出,可以使用如下语句查看:heroku logs--source app-name
Heroku提供了在本地//localhost:5000上运行应用程序的可能性:heroku local web
列出所有Heroku应用程序:heroku apps
删除部署:heroku apps:destroy--app app-name
添加所有者(帐户)来访问应用程序:heroku access:add me@email.com,删除heroku access:remove
Heroku环境变量
如果在本地使用.env文件,则可能需要为Heroku部署使用其他环境变量。可以使用heroku config来设置它们:heroku config:setPORT=3001.。这些值将覆盖用户在.env文件中设置的变量。
要查看所有定义的Heroku环境变量,只需使用heroku config。如果想删除一个环境变量例如 PORT,使用heroku config:unset PORT。
免费可用的版本
允许最多五个Heroku应用程序
512 MB RAM
不可升级可用,只可以同时运行一个应用程序实例
闲置30分钟后进入睡眠状态
随机生成应用程序名称
有关内存使用情况,响应时间和可用吞吐量的度量标准,但无法添加自定义度量标准

使用now.sh进行部署
Now.sh着重于开发者体验(DX),这是一种独特的方式。他们试图提供灵活的工具,使用起来非常简单。Now.sh是Zeit.cowhich开发的一些工具的一部分。
为了简单起见,我们将只通过npm安装Now.sh CLI:
接下来,需要注册以便可以在控制台中使用。登录和注册都发生在login page。每次登录时,都必须通过电子邮件验证来确认登录尝试。 确认后,将被重定向到仪表板,程序员可以查看日志和部署。
现在开始使用,只需在控制台中输入now即可。控制台将提示输入电子邮件,填写正确的电子邮件,并通过点击验证电子邮件。
登录之后,让我们来看看package.json中的启动脚本。 Now.sh使用这个来启动应用程序。这是s字段的样子:
让我们开始将代码部署到now.sh. 确保在代码示例的根目录下。要开始部署过程,只需点击now即可。我想你可以看到developer experience,一切都可以用一个关键字now执行!如果对应用程序进行更改,并且想要重新部署应用程序,那么只需在控制台中点击now即可。
应用程序的URL可以在控制台日志中找到,有关部署或其他命令的更多常规日志可以在仪表板找到。 部署Node应用程序:一文看懂Heroku和Now.sh的最大区别!



定制和定义环境变量
定制Now.sh部署的一种方法是使用now.json文件。但是,由于已经使用了package.json文件,因此可以在now键下添加所需的自定义。此配置允许自定义应用程序名称和别名,设置环境变量,指定部署类型并定义引擎。

程序员也可以通过CLI设置环境变量:now -e NODE_ENV =“production”-e PORT =“3001”。
如果想提供一个dotenv文件,可以设置选项--dotenv,如果想使用.env.production而不是.env?,可以考虑用--dotenv=.env.production来解决。最后,还可以将生产dotenv文件添加到你的package.json。

有用的Now.sh命令
可以为部署添加一个别名:now alias deploy-url aliasname
列出所有部署与他们唯一的代码:now ls
删除部署:now rm unique-code
强制新建(如有问题):now-f
扩展web应用程序(免费版最多3个):now scale deployment-url3。有时,预测流量是不容易的。Now.sh允许设置自动缩放比例的最小值和最大值:now scale deployment-url min max。
监视日志
日志输出可以通过以下命令获取:nowlogs[deployment-url|deployment-id]。更高级的日志记录也是可能的。
now logs-a-q"GET"-n10deployment-url:显示包含单词GET的10个最新日志。
now logs--since=20171028:显示2017年10月28日的所有日志(ISO 8601格式)
点击Now.sh仪表板中的应用程序也可以访问日志。
Now.sh的OSS计划
OSS计划可以免费使用,并提供以下内容:
带宽:1GB
日志存储高达100MB
无限的部署可能
并发实例限制为3个
不支持自定义域
最大文件大小:1MB
没有自动扩展支持
比较
Heroku和Now.sh都提供了很好的功能。Now.sh通过提供易于使用的CLI更多地关注开发者的体验。另一方面,Heroku更注重可视化的记录,特别是用度量指标进行监控。
就个人而言,我更喜欢简单的Now.sh,现在只需使用一个关键字now来进行(重新)部署。对于Node应用程序,我喜欢在.package.json文件中添加now属性来自定义Now.sh部署。不需要像Procfile Heroku所要求的那样添加额外的文件。
这两个平台之间很难选择, 但这只取决于你的喜好和需求。除了上述一些关于免费版本可以获得的支持,从易用性方面来说,Now.sh或许更棒。

from  http://tech.it168.com/a2017/1108/3178/000003178495.shtml

laravel-china.org

$
0
0
https://laravel-china.org/courses

heroku命令大全

$
0
0
 access          管理用户对应用的访问
addons 用于开发,扩展和操作您的应用程序的工具和服务
apps 管理应用
auth heroku 认证
authorizations OAuth 认证
buildpacks 管理应用程序的构建包
certs SSL证书管理
ci 在Heroku上运行应用程序测试套件
clients 在平台上的OAuth客户端
config 管理应用的配置
container 使用容器构建和部署Heroku应用程序
domains 管理app的域名
drains 应用程序的日志配置
features 管理可选功能
git 管理应用程序的git存储库
keys 管理 ssh
labs 测试功能(不清楚功能)
local在本地运行heroku应用程序
logs 显示最近的日志输出
maintenance 管理应用程序的维护模式
members 管理组织成员
notifications 显示通知
orgs 管理组织
pg 数据库管理
pipelines 管理pipelines中的应用程序集合
plugins 管理插件
ps 管理 dynos (dynos, workers)
redis 管理heroku redis实例
regions 列出部署的可用区域
releases 管理应用的releases
run 在Heroku dyno内运行一次性
sessions OAuth 会话
spaces 管理 heroku 私有空间
status Heroku内应用的状态
teams 管理团队
update 更新heroku
webhooks 设置应用程序活动的HTTP通知

常用命令

# 重新启动(必须在项目的根目录执行)
heroku restart
 
# 列出应用名
heroku listheroku apps
 
# 删除应用
heroku apps:destroy 应用名 --confirm
应用名

# 发布应用(必须在项目的根目录执行)
git push heroku master

# 持续查看 log 去掉 --tail为查看最新log
heroku logs --tail

# 向应用程序添加日志
heroku drains:add https://xx.herokuapp.com/

# 显示应用程序的当前维护状态
heroku maintenance

# 连接数据库(必须在项目的根目录执行)如果有多个数据库psql后面跟着数据库名字
heroku pg:psql

# 远程数据拉取(必须在项目的根目录执行)可以将远程数据从Heroku Postgres数据库拉到本地机器上的数据库
heroku pg:psql DATABASE_URL 本地数据库名字 --app 应用名称

# 把本地数据同步到远程DB
heroku pg:push 本地数据库名字 DATABASE_URL --app 应用名称

链接:https://www.jianshu.com/p/10b400f699fe

利用部署在heroku.com空间上的v2ray-heroku程序翻墙(我测试成功)

$
0
0
首先在www.heroku.com上注册账号,登陆后,访问
https://heroku.com/deploy?template=https://github.com/wangyi2005/v2ray-heroku
服务端部署完成后,访问https://your-app-name.herokuapp.com,如果显示Bad Request,表示部署成功。
客户端应使用websocket+tls传输协议。Vmess协议的 users id 应当换成https://dashboard.heroku.com/apps/your-app-name/settings页面里的UUID的值。(先点击Reveal Config Vars)
"alterId": 64

在客户机器上,安装v2ray. v2ray的配置文件的模版为:
https://raw.githubusercontent.com/KiriKira/vTemplate/master/websocket%2BTLS/config_client.json

wget https://raw.githubusercontent.com/KiriKira/vTemplate/master/websocket%2BTLS/config_client.json -O heroku_config_client.json

nano  heroku_config_client.json
(把example.domain改为your-app-name.herokuapp.com ,把alterId的值改为64 ,把id的值改为https://dashboard.heroku.com/apps/your-app-name/settings页面里的UUID的值,把port的值改为2082 )
然后运行v2ray --config heroku_config_client.json
然后设置本地机器的浏览器的socks5代理服务器为127.0.0.1:2082 ,浏览器即可翻墙。

项目地址:
https://github.com/wangyi2005/v2ray
https://github.com/wangyi2005/v2ray-heroku
https://github.com/KiriKira/vTemplate/raw/master/websocket%2BTLS/config_client.json
https://github.com/KiriKira/vTemplate
-----------

另外一个实现方法-http://briteming.blogspot.com/2018/01/v2hero.html

如何删除你的heroku.com账号里的无用的app

$
0
0
heroku.com账号里,只允许创建5个免费app.如果创建了5个免费app后,发现里面某个app没什么用,你可用如下的办法删除该app.(因为我在heroku.com网站里,未找到删除app的选项,只好使用如下的办法)

在你的本地机器mac上,运行:
brew install heroku-toolbelt (运行brew install heroku也行,但是heroku-toolbelt比heroku的功能要多一些)
heroku apps (列出你账号下的所有应用名)
heroku apps:destroy 某个应用名 --confirm 某个应用名删除该应用)
 
参考:heroku命令大全
 
 

在Heroku上部署Rails App

$
0
0
https://devcenter.heroku.com/articles/getting-started-with-rails5
在Heroku平台上部署非常简单,而且Heroku提供5个免费的App部署名额,所以如果觉得常规部署Rails应用的方式太过麻烦,那么Heroku是个比较好的选择,那么Heroku部署虽然简单,但是还是有一些要注意的细节,在此记录下来。
部署前的准备工作
Heroku对于本地环境的要求:
  1. 免费的Heroku Account
  2. 本地ruby版本 >= 2.2.5
  3. 本地需要安装bundler gem install bundler
部署之前,首先要安装CLI(Heroku Command Line Interface), 以Ubuntu为例:
# Run this from your terminal.
# The following will add our apt repository and install the CLI:
sudo add-apt-repository "deb https://cli-assets.heroku.com/branches/stable/apt ./"
curl -L https://cli-assets.heroku.com/apt/release.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install heroku
然后修改你的Gemfile
# 首先加上ruby版本的指定
ruby '2.3.1'
# 然后修改数据库(如果你的开发环境使用的是sqlite的话, 如果使用sqlite3会出现app crashed error), 删除
gem 'sqlite3'
# 加上
group :test, :developmentdo
gem 'sqlite3'
end
group :productiondo
gem 'pg'
end
然后 bundle install生成新的Gemfile
至于为什么不能在生产环境使用sqlite3数据库,参见教程
下面开始部署的步骤
  1. 在Heroku服务器上创建一个App heroku create myApp (如果没有指定App的名称,Heroku会帮你生成一个随机的名称)
  2. 将本地的Git项目提交到Heroku的服务器 git push heroku master
  3. 现在项目已经部署好了,需要进行数据库的迁移
herokurunrakedb:create
herokurunrakedb:migrate
herokurunrakedb:seed
  1. 在项目的根目录创建Procfile(Procfile的作用是声明启动应用需要执行的命令),如:
    web: bundle exec rails server -p 3000
    注意:文件名只能是Procfile,像Procfile.txt这种都不行,另外,必须创建在项目根目录下!
  2. 至此,项目已经部署完毕,可以执行 heroku open访问
CLI的一些命令
  1. 打开生产环境的Rails Console heroku run rails c
  2. 查看正在运行的dyno(dyno可视为Procfile中指定的命令的一个轻量级的容器) heroku ps
  3. 查看日志 heroku logs --tail
  4. 查看Heroku config variable heroku config --app myApp
  5. 删除Heroku上的App Appheroku apps:destroy --app example
链接:https://www.jianshu.com/p/867848205956
 
https://www.jianshu.com/p/9ddb636c79cc

brew install icu4c运行之后的提示

$
0
0
brew install icu4c
运行之后,提示:

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"'>> ~/.bash_profile
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"'>> ~/.bash_profile

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/icu4c/lib
    CPPFLAGS: -I/usr/local/opt/icu4c/include
For pkg-config to find this software you may need to set:
    PKG_CONFIG_PATH: /usr/local/opt/icu4c/lib/pkgconfig

mac上,一键下载整个网站的方法(以便断网浏览)

$
0
0
写在前面:
最近vpn容易断(大环境所致)。于是思考如何离线浏览一个网站。别说,还真找到了简单粗暴的方法。可以实现:一键离线整个网站(包括图片和视频),以便在火车上,飞机上,断网的情况下浏览网页,尽情学习。

开始:(三步)

  1. 下载安装软件。点击下载
  2. 打开软件,输入网址,这里以我经常查阅的 W3school 的 JS 课程为例。


  3. 离线选项,点击下载:

    说明:
    • 离线页数限制:根据你想离线的页数来设置,宜多不宜少。
    • 链接层级:从当前页面要往下离线的层级。
    其他配置,各位自行研究下。。。

搞定!

看演示:(注意细节:已关闭wifi)

重要提示:(本文重点)

被墙的图片无法离线,开vpn再离线也不行。(大写的悲伤!)经过一天的苍蝇模式(乱撞)尝试。现在,您一秒钟就可以get到了,解决方案如下:
  • 导出到本地文件夹
  • 双击打开:
  • 搞定!从Chrome或Safari打开后,开vpn浏览器会自动加载图片.
柳暗花明又一村,研究了一天本来就要放弃了,结果找到曲线救国的方法。。。相信我,你会遇到这个情况的!

用nanopi-neo搭建一个自动翻墙设备

$
0
0
国人其实在嵌入式内核方面其实走在了世界前列.
蒙赐一个nanopi-neo的小设备,家里本来是用hp5315的设备进行翻墙的,由于内核太低,无法使用ipset。所以迫不得已,升级到nanopi-neo
说一下过程:
一、下载官方映像文件nanopi-neo_FriendlyCore-Xenial_4.14.0_20171218.img.zip
注意,必须是4.14内核的,而不能是3.4.39内核的,因为ipset在3.4.39里缺xt_set模块
二、烧进8G的TF卡,ssh登录
nanopi缺省是DHCP启动的,扫描整个网段
nmap -p22 --open 192.168.92.0/24
得到机器的大概ip,然后ssh上去,root密码是fa
三、安装ipset并检验一下
apt install ipset  
ipset list
modporbe xt_set
lsmod
四、安装dnscrypt-proxy
apt install dnscrypt-proxy  
注意,这里dnscrypt-proxy是监听在127.0.2.1:53端口的,我们改一下,方法比较古怪,因为实际是systemctl控制了监听端口,直接改/etc/default/dnscrypt-proxy是无效的!!!
export SYSTEMD_EDITOR="vi"
systemctl edit dnscrypt-proxy.socket
输入以下内容
[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5353
ListenDatagram=127.0.0.1:5353
改好后重启,缺省用的是cisco这个开放dns
五、安装shadowsocks-libev
shadowsocks-libev是用c写的,占内存小,效率高,在这么小的个设备上,必须用这个
apt-get install software-properties-common -y  
add-apt-repository ppa:max-c-lv/shadowsocks-libev -y
apt-get update
编辑/etc/config.json文件
{
"server":"your-ss-server ip",
"server_port":9001,
"local_port":1080,
"password":"type this user's password",
"timeout":60,
"method":"aes-256-cfb"
}
运行:
ss-redir -c /etc/config.json  
同时单独建立一个DNS解析的通道,监听到本地端口4321,通过vps来转发请求到google的8.8.8.8:53
ss-tunnel -s your-ss-server-ip -p 9001-m aes-256-cfb -k password -b 127.0.0.1-l 4321-L 8.8.8.8:53-u  
这样本地就有了两个DNS,一个是dnscrypt-proxy,监听到5353,一个ss-tunnel,监听到4321
为什么要建立两个DNS呢?按道理是应该用4321,因为必须考虑就近原则,通过ss通道访问国外网站时,应该以vps返回的查询结果为准,dnscrypt-proxy很可能地址定位偏移了。
六、修改dns-masq
运行dnsmasq|grep ipset确认支持ipset
然后到 https://github.com/felixonmars/dnsmasq-china-list
把4个国内加速的conf拷贝出来放到/etc/dnsmasq.d目录
accelerated-domains.china.conf  
apple.china.conf
bogus-nxdomain.china.conf
google.china.conf
然后拿到国内ip地址的范围,没用啊,只是记录一下,说不定将来有用。
wget -O-'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest'| grep ipv4 | grep CN | awk -F\|'{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }'>/etc/chinadns_chnroute.txt  
拿到https://zohead.com/downloads/dnsmasq.tar.gz
解压放到/etc/dnsmasq.d目录下
最终/etc/dnsmasq.conf的内容:
domain-needed  
bogus-priv
no-resolv
no-poll
conf-dir=/etc/dnsmasq.d
address=/tms.can.cibntv.net/0.0.0.0
server=114.114.114.114
dhcp-range=192.168.2.50,192.168.2.100,72h
dhcp-option=3,192.168.2.2
dhcp-option=6,192.168.2.2
cache-size=10000
min-cache-ttl=1800
最主要的就是dnsmasq.tar.gz的内容:
server=/12bet.com/127.0.0.1#5353  
ipset=/12bet.com/gfwlist
很清晰,这里确定了12bet.com走本地5353端口进行dns查询,并且访问的包标记到ipset链gfwlist中,当然这里最好是用4321的dns,会符合就近解析原则
重启dnsmasq就ok了
七、准备iptables
ipset -N gfwlist iphash  
iptables -t nat -A PREROUTING -p tcp -m set–match-set gfwlist dst -j REDIRECT –to-port 1080
这样一切就ok了
Viewing all 20537 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>