yinghuocho / gotun2socks

A Golang implementation of tun2socks
BSD 2-Clause "Simplified" License
292 stars 103 forks source link

local DNS result map support. eg ip -> domain #5

Closed FlowerWrong closed 7 years ago

FlowerWrong commented 7 years ago

When I use the shadowsocks-libev version ss-local with udp relay. it worked for all. But when I use the python version shadowsocks with udp relay, it not worked for contaminated DNS domain, eg www.google.com. Sense shadowsocks-libev handles the DNS map, and conversion it to domain it self. like 5.6.7.8 -> google.com. I should sure it later.

So it is like

socks5 udp: ip -> domain socks5 connect: domain -> ip

yinghuocho commented 7 years ago

@FlowerWrong I tried to chain gotun2socks with shadowsocks-csharp and It works. My test with shadowsocks-libev failed because shadowsocks-libev seems closing the corresponding socks connection of UDP session prematurely. I don't know how UDP relay of shadowsocks python version works. What do you mean by "conversion it to domain itself" ?

FlowerWrong commented 7 years ago

conversion it to domain itself

This means fake ip address. Like surge. When dns query for gfw domain, eg google.com, it will reply a fake ip, eg, 10.0.0.133. But I do not see you handle that.

yinghuocho commented 7 years ago

I don't distinguish DNS of gfw-blocked domains from other DNS queries. You need to setup system DNS to use a resolver accessible by your remote server, like 8.8.8.8, then all DNS queries will be forwarded to the socks proxy using SOCKS5's UDP Associate.