Total Pageviews

Tuesday 2 July 2019

用dns-tcp-socks-proxy搭配一个socks proxy,解决dns污染问题

在本地机器mac上。
git clone https://github.com/jtripper/dns-tcp-socks-proxy
cd dns-tcp-socks-proxy

yudeMacBook-Air:dns-tcp-socks-proxy brite$ gcc -o dns_proxy dns_proxy.c
(此命令会在当前目录下,生成可执行文件dns_proxy)

yudeMacBook-Air:dns-tcp-socks-proxy brite$ ls
LICENSE README.md dns_proxy dns_proxy.conf
Makefile arch_files dns_proxy.c resolv.conf
yudeMacBook-Air:dns-tcp-socks-proxy brite$ nano dns_proxy.conf
(把socks_port的值改为1080 ,把listen_addr的值改为127.0.0.1)

yudeMacBook-Air:dns-tcp-socks-proxy brite$ 
yudeMacBook-Air:dns-tcp-socks-proxy brite$ sudo ./dns_proxy

Password:
[*] Listening on: 127.0.0.1:53
[*] Using SOCKS proxy: 127.0.0.1:1080
[*] Will drop priviledges to nobody:nobody
[*] Loaded 39 DNS servers from resolv.conf.

[*] No errors, backgrounding process.
yudeMacBook-Air:dns-tcp-socks-proxy brite$ sudo lsof -i:53
COMMAND     PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
dns_proxy 66299 nobody    3u  IPv4 0xc910eb4b6c44684f      0t0  UDP localhost:domain
yudeMacBook-Air:dns-tcp-socks-proxy brite$


这里的socks proxy,我运行的是ss,所以其端口要改为1080.如果你运行的是其他socks proxy,比如ssh tunnel,则要socks_port的值改为ssh tunnel在本地机器上监听的端口(如:7071)

实际例子:
sudo wg-quick up wg0
sudo networksetup -setdnsservers Wi-Fi Empty && sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
cd ~/dns-tcp-socks-proxy && sudo ./dns_proxy

这次,它表现不错。运行了好几个小时才翻墙失败。解决办法:很简单
先断开vpn- 运行sudo wg-quick down wg0 ,
然后重新运行上面的三步命令。

项目地址:https://github.com/jtripper/dns-tcp-socks-proxy
https://github.com/JustinHop/dns-socks-proxy
--------

dns-tcp-socks-proxy, 通过SOCKS实现隧道DNS请求


Simple daemon to tunnel DNS requests over SOCKS
  • 源代码名称:dns-tcp-socks-proxy
  • 源代码网址:http://www.github.com/jtripper/dns-tcp-socks-proxy
  • dns-tcp-socks-proxy源代码文档
  • dns-tcp-socks-proxy源代码下载
  • Git URL:
    git://www.github.com/jtripper/dns-tcp-socks-proxy.git
    Git Clone代码到本地:
    git clone http://www.github.com/jtripper/dns-tcp-socks-proxy

    DNS SOCKS代理

    通过socks代理( 例如通过ssh或者 Tor ) 实现隧道DNS请求的简单DNS代理。 在设置透明代理时,这可能非常有用。

    它为从文件" resolv.conf"中的每个请求选择一个随机DNS服务器,它是一个分隔的DNS服务器。

    为了绑定到端口 53,守护进程必须作为 root 运行。

    用法

    用法:。/dns代理 [options ]

    如果没有参数,则从'dns_proxy.conf'读取配置文件。

    • -n --没有配置文件( socks: 127.0.0.1: 9050,侦听器:0.0.0.0: 53。
    • -h --打印这里消息并退出。
    • config_file --从指定的配置文件中读取。

    配置

    配置文件中应该包含以下任何选项( 并忽略以以下方式开始的行'#'):

    • socks_addr -- socks侦听器地址
    • socks_port -- socks侦听器端口
    • dns代理侦听的listen_addr --地址
    • 用于侦听dns代理的listen_port --端口( 大多数情况下为 53 )
    • 绑定后要删除的set_user --用户名
    • 绑定后要删除的set_group --组
    • resolv.conf 文件的resolv_conf --位置
    • log_file --位置登录到( 应该是/dev/null,除非调试)。

    任何未指定的选项都将设置为默认值:

    • socks_addr = 127.0.0.1
    • socks_port = 9050
    • listen_addr = 0.0.0.0
    • listen_port = 53
    • set_user = 无
    • set_group = 无
    • resolv_conf = resolv.conf
    • log_file =/dev/null

    在其他发行版上安装:

    
    git clone https://github.com/jtRIPper/dns-tcp-socks-proxy.git
    
    
    cd dns-tcp-socks-proxy
    
    
    make
    
    
    
    # edit dns_proxy.conf as necessary
    
    
    ./dns_proxy
    
    
    

    运行守护进程后,应将系统配置为自动使用代理。