惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
Engineering at Meta
Engineering at Meta
爱范儿
爱范儿
博客园 - Franky
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
雷峰网
雷峰网
月光博客
月光博客
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
WordPress大学
WordPress大学
罗磊的独立博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Y
Y Combinator Blog
Know Your Adversary
Know Your Adversary
宝玉的分享
宝玉的分享
L
Lohrmann on Cybersecurity
S
SegmentFault 最新的问题
L
LangChain Blog
K
Kaspersky official blog
P
Palo Alto Networks Blog
P
Privacy & Cybersecurity Law Blog
美团技术团队
Scott Helme
Scott Helme
B
Blog RSS Feed
T
Threat Research - Cisco Blogs
博客园_首页
L
LINUX DO - 热门话题
腾讯CDC
C
CERT Recently Published Vulnerability Notes
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
V
V2EX
Martin Fowler
Martin Fowler
T
The Exploit Database - CXSecurity.com
人人都是产品经理
人人都是产品经理
MongoDB | Blog
MongoDB | Blog
Latest news
Latest news
S
Schneier on Security
AWS News Blog
AWS News Blog

方永、南天紫雲

linux透明代理 技术的边界 停机问题通俗说明 Rust与oracle、redis集群的纠结 学习能力的增长 微信调试的原语 mac外接移动硬盘安装ArchLinux linux的死机问题 linux下全键盘操作 漂亮又好用的bspwm linux本机透明代理 ssh、mosh、autossh linux不能待机又一例 从WordPress切换到Hugo 折腾电脑开机 linux系统QQ新思路 Arch Linux的字体渲染 svn管理之submin 二维码(qrcode)名片的一些事儿 用lua nginx module搭建一个二维码(qr code)生成器 CentOS 7 安裝註記 php程序連接MySQL时只能127.0.0.1而localhost無法連接的問題 ThinkPad之FAN_ERROR、hi fi聲卡 jetty多端口部署 OpenWrt簡單暴力限網 linux中cron之PATH变量 OpenWrt的WDS無線橋接模式 再敘OpenWrt下的rtl8187無線中繼 sed之模擬tail 終端進化之二零一三 linux下的郵件服務器:postfix_dovecot_roundcube 一次性密碼/動態口令卡原理 xl2tp之VPN靜態地址分配 rtl2838U2832试用记 linux中pptp协议VPN搭建 glances监控工具安装 CentOS6.4硬盘安装 Debian Wheezy硬盤/U盤安裝小記 Kirby小試 zsh shell怎么打开常用的目录? OpenWrt SSH免密码使用密钥登录 linux中的vsftpd的匿名(anonymous)用户配置 無光驅無USB無軟驅,怎麼修復硬盤MBR? 那些個人網站 linuxFreeBSD下的dnspod动态域名客户端 Windows系统盘的32K之殇 一枚Chrome插件引起的大量磁盤IO問題 用批處理切換網卡的IP(適用Win7、Win8) Windows中的DHCP服务器 Win8啓動時出現“您的電腦需要修復”問題的解決辦法 Windows8睡眠(待机)模式异常处理 最强大好用而又小巧的计算器 Windows8運行不能保存歷史命令 Win8下的红警2尤里复仇 为cmd添加readline,如Bash Shell般使用cmd 手动添加修改win8 win+x菜单 Win8運行卸載程序時提示2503之解決一法 烽火HG110提权一法 缓解眼疲劳有效的办法 mintty乱码解决办法 糟糠美妾 免费易用的Win8 ArchLinux的類box環境音量調節二三事 使用OpenWrt与curl挂QQ OpenWrt的安全 OpenWrt BCM63xx rtl8187使用注意事项 Arch Linux之systmed使用简介 Archlinux 2012.07.15之后发布的镜像新手安装完全向导 FreeBSD 9.0 安装简记 记一由FreeBSD引发的午夜惊魂 Jekyll or handmade wi-fi无线破解过程与原理简要介绍 修复QQ影音异常卸载后的文件关联 吐槽一下000webhost 为OpenWrt的luci Web界面加速 最小的sed for Windows linux的磁盘自动挂载 OpenWrt中crontab -e的使用 sddns(dnspod client for OpenWrt)使用说明 OpenWrt中vsftp添加新用户 php+markdown写博客 linux arp防火墙之p2p终结者 墙外的世界很精彩 OpenWrt使用dnspod的动态域名解析(ddns)功能 OpenWrt架设nginx php网站 openwrt架设uhttpd+php+sqlite网站 vim自动跳到上次离开的光标位置 OpenWrt无线中继配置文件 修行八支 漫步者R201T打摩升级改造 阿里(Ali)3328系dvb接收机软件升级方法 db120刷OpenWrt固件并使用ppp方式ADSL拨号 移动短信助手 chrome tips一则 cdate,显示中国传统农历日期 更改硬盘模式为AHCI后Windows及linux的调整 使用grub2加载软盘和光盘镜像 电脑用数据线连接手机上网 电脑通过蓝牙连接手机GPRS上网 我与我的语言
OpenWrt自动fucking墙記錄
zola · 2015-02-06 · via 方永、南天紫雲

做中轉的路由器更新到OpenWrt BarrierBreaker 14.07 後,趁熱乎把自動fucking牆也部署上了。

一、 首先得有個牆外的VPS。

VPS的好處就是方便靈活,一年不到10USD的很多,找一個速度快靠譜點的就可以。

在VPS上面用shadowsocks-libev架一個ss服務,注意打開-u參數,做DNS中轉查詢會用到。

二、 然後是作爲網關幷已刷OpenWrt的路由器。

淘寶上一大堆。

注意OpenWrt的版本,用最新版的最好。

三、 大致思路如下:

在瀏覽器中使用PAC幷根據域名翻,瀏覽器會將包含域名的url請求發送給socks5代理幷接收返回的數據。與瀏覽正常的網站相比,瀏覽器沒有做DNS的解析請求, DNS的解析在socks5的服務端完成。

而瀏覽器訪問網站通常的流程,DNS解析與發送HTTP請求是分開的,DNS解析與HTTP都要在網關的參與下進行(隻考慮一般情況)。現在已經有了網關的最高權限,那麼隻需將那些被牆的網站根據域名做一個列表,若HTTP請求中的host在這個列表中,那麼將其轉至shadowsocks處理即可。當然,HTTP請求中的host會在HTTP請求發起前去做DNS解析的請求。在OpenWrt中,DNS服務端是dnsmasq,做請求中轉的是Linux內核防火牆(由iptables操作),shadowsocks是ss-redir

於是,被牆的域名列表交給dnsmasq,dnsmasq在返回查詢記錄的同時,會給存在于域名列表中的IP打個標記(由IPSET實現)。Linux的內核防火牆會將打這個標記的請求轉發給ss-redir。

dnsmasq作爲DNS服務端,只是做DNS解析的中轉與緩存,它會將DNS解析請求進一步發送給上級DNS服務端,這個上級DNS服務端,一般由通訊運營商提供,幷在pppoe或DHCP時獲得。問題是,這個上級DNS服務端返回的解析結果幷不可靠,尤其是那些被牆的域名。好在dnsmasq可以爲每個域名指定單獨的DNS服務端,於是將之前那個被牆域名列表複製一份,幷指定去一個可靠的DNS服務端獲取解析結果。

這個可靠的DNS服務端,一般由pdnsdChinaDnsdns over tunnel等實現,pdnsd使用TCP協議從國外可靠的DNS服務端獲取結果,ChinaDns丟棄假的幷接收真正的查詢結果,dns over tunnel就是將DNS的查詢通過一個可靠的隧道來保證查詢結果的正確,shadowsocks的ss-tunnel就可以做這個隧道。

四、 配置過程如下:

  1. 在OpenWrt中安裝shadowsocks。

    在shadowsocks官網下載至OpenWrt中用opkg安裝即可。

  2. 安裝dnsmasq。

    OpenWrt的固件中就集成了dnsmasq,但是幷沒有ipset的功能,需要安裝完全版。

        opkg update
        opkg remove dnsmasq
        opkg install dnsmasq-full
        opkg install kmod-ipt-ipset ipset
  3. 配置參考:

    (1) shadowsocks服務腳本:

        #!/bin/sh /etc/rc.common
    
        START=95
        
        USE_PROCD=1
        
        SS_LOCAL=/usr/bin/ss-local
        SS_REDIR=/usr/bin/ss-redir
        SS_TUNNEL=/usr/bin/ss-tunnel
        
        CONFIG=/etc/shadowsocks.json
        
        start_service()
        {
                procd_open_instance
                procd_set_param respawn
                procd_set_param command "$SS_LOCAL"
                procd_append_param command -c "$CONFIG"
                procd_close_instance
        
                procd_open_instance
                procd_set_param respawn
                procd_set_param command "$SS_REDIR"
                procd_append_param command -c "$CONFIG"
                procd_append_param command -b "0.0.0.0"
                procd_append_param command -l "8080"
                procd_close_instance
        
                procd_open_instance
                procd_set_param respawn
                procd_set_param command "$SS_TUNNEL"
                procd_append_param command -c "$CONFIG"
                procd_append_param command -b "127.0.0.1"
                procd_append_param command -l "5353"
                procd_append_param command -L "8.8.8.8:53"
                procd_append_param command -u
                procd_close_instance
        }

    (2) dnsmasq配置:

    /etc/dnsmasq.conf中添加一句conf-dir=/etc/dnsmasq.conf.d

    /etc/dnsmasq.conf.d/agw_list中內容如下:

        server=/www.google.com/127.0.0.1#5353
        ipset=/www.google.com/agw

    每一個域名有兩條這樣的記錄。

    (3) 防火牆配置:

    /etc/firewall.user中增加如下內容:

        ipset -N agw iphash
        iptables -t nat -A PREROUTING -p tcp -m set --match-set agw dst -j REDIRECT --to-port 8080