Outline-client: Using custom DNS server instead of OpenDNS

Created on 10 Apr 2018  路  16Comments  路  Source: Jigsaw-Code/outline-client

Anyone knows how can I change the DNS for the clients? Currently they are using OpenDNS by default. I need to use my internal DNS server.

Most helpful comment

Solve it by

iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to $custom_dns_ip:53;
iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to $custom_dns_ip:53;
iptables -t nat -A POSTROUTING -j MASQUERADE

It means:
1) Any local user contacting out world to port tcp 53 send to $custom_dns_ip at port 53.
2) Same as 1 but for udp
3) Set the source information on the outgoing packet as coming from us.

All 16 comments

It uses what is in here ???

nano /etc/resolv.conf

Currently, the Outline clients for different platforms behave differently. The Windows client uses the server's default DNS configuration, which is often controlled by /etc/resolv.conf. The clients for other operating systems use a hardcoded public DNS resolver (currently OpenDNS or Dyn Internet Guide).

Can we just edit the code before it install/compile?

Does Outline use DNSCrypt?

FYI @jedisct1, @bitbeans, @KOLANICH & @CHEF-KOCH

@KerstinMaur It doesn't seem to.

By the way, I end up with NAT iptables rules to redirect all DNS request

Maybe 1.1.1.1 would be an option too?

Thanks for checking @jedisct1, @NanoG6 & @CHEF-KOCH 馃槝

Solve it by

iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to $custom_dns_ip:53;
iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to $custom_dns_ip:53;
iptables -t nat -A POSTROUTING -j MASQUERADE

It means:
1) Any local user contacting out world to port tcp 53 send to $custom_dns_ip at port 53.
2) Same as 1 but for udp
3) Set the source information on the outgoing packet as coming from us.

Thanks, @hd-deman! 馃槝

@NanoG6 Thanks for trying Outline! I think this one would be better in the client issue tracker:
https://github.com/Jigsaw-Code/outline-client/issues

@hd-deman, could you tell me how to change the setting, please? Your solution works but I could not change it by using the same command. And I want to give it 2 DNS addresses, it that possible?

Just to confirm, if I want to use Cloudflare DNS (1.1.1.1), I just need to do this?

iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 1.1.1.1:53;
iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 1.1.1.1:53;
iptables -t nat -A POSTROUTING -j MASQUERADE

EDIT: After restarting the server, having disconnected and re-connected the client, on https://www.dnsleaktest.com/ the DNS is still from OpenDNS :(

@hd-deman I see what you did there, glad it works for you but we'd rather make this setting explicit in the client vs. having the server silently rewrite queries.

@pascalandy iptables is one of the hardest problems in computer science :-)

@hd-deman I see what you did there, glad it works for you but we'd rather make this setting explicit in the client vs. having the server silently rewrite queries.

@pascalandy iptables is one of the hardest problems in computer science :-)

Then you should've let user decide what DNS server they want to use, DNS clearly plays a big part in privacy.

The presented solutions are inoperative
Docker rewrites firewall chain
Does the community have a ready-made solution? As I understand it, developers will not add the feature - custom DNS. Thanks!

Was this page helpful?
0 / 5 - 0 ratings