/ip2socks

ip flow to socks, support tun and tap.

Primary LanguageShell

ip2socks

Support operating system

  • OSX
  • Linux

Get start

git clone https://github.com/FlowerWrong/ip2socks.git --recursive

# ubuntu vm
vagrant up --provider virtualbox
vagrant ssh

Compile with C++ 11 and cmake

# build ip2socks
cmake .
make


## start ip2socks
# OSX
sudo ./ip2socks --config=./scripts/config.darwin.example.yml

# linux
sudo ./ip2socks --config=./scripts/config.linux.example.yml

ip mode

  • tun
  • tap

dns mode

  • tcp: just dns with port you set local_dns_port redirect to tcp, other flow will be try to send to remote via socks 5 udp tunnel
  • udp: just dns with port you set local_dns_port redirect to udp, other flow will be send to remote via socks 5 udp tunnel

There are 5 ways to setup DNS query to remote

  • use-vc in /etc/resolv.conf: Sets RES_USEVC in _res.options. This option forces the use of TCP for DNS resolutions.
  • pdnsd
  • lwip udp hooked, redirect to upstream tcp dns server via socks 5, config with remote_dns_server, you can just route your dns servers to tun or tap with route on OSX or ip route on Linux
  • lwip udp hooked, redirect to upstream tcp dns server via socks 5, config with remote_dns_server, setup your dns to addr, eg 10.0.0.2
  • lwip udp hooked, set you dns to remote, eg: 8.8.8.8

Library

Know bugs

  • too many CLOSE_WAIT to socks server, see netstat -an | grep CLOSE_WAIT | wc -l
  • OSX receive data too often, eg: brew update, brew upgrade
  • if ERR_QUIC_PROTOCOL_ERROR, go to chrome://flags/ disable quic
  • ns_initparse Message too long bug
  • (libev) select: Invalid argument
  • tcp_raw_error is -14(ERR_RST): Connection reset.

TODO

  • speed statistics
  • DNS cache
  • block rule support, just close it
  • dnsmasq address=/test.com/127.0.0.1 support
  • domain, domain_keyword, domain_suffix (ip_cidr, geoip) rule support
  • timeout
  • log
  • OSX route batch insert
  • lwip keep-alive support
  • lwip SO_REUSEADDR support
  • TCP fast open with Linux kernel > 3.7.0
  • socks 5 client UDP relay
  • FreeBSD support
  • Android support
  • iOS support
  • ipv6 support