From 2c07ef20f761f87c1b493aa98561e8e1e0a5d51b Mon Sep 17 00:00:00 2001 From: jfurtner Date: Thu, 14 Jan 2016 17:30:26 -0700 Subject: [PATCH] Transparent proxy fix, only listen on ipv6 port if an ipv6 address --- common.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/common.c b/common.c index 394cdb1..2b0878a 100644 --- a/common.c +++ b/common.c @@ -121,6 +121,15 @@ int start_listen_sockets(int *sockfd[], struct addrinfo *addr_list) (*sockfd)[i] = socket(saddr->ss_family, SOCK_STREAM, 0); check_res_dumpdie((*sockfd)[i], addr, "socket"); + /* If transparent proxy enabled and ipv6 address then only listen on IPv6 port. + * Transparent proxying fails if you don't. + * */ + if (transparent && saddr->ss_family == AF_INET6) + { + res = setsockopt((*sockfd)[i], IPPROTO_IPV6, IPV6_V6ONLY, (char*)&one, sizeof(one)); + check_res_dumpdie(res, addr, "setsockopt(IPV6_V6ONLY)"); + } + one = 1; res = setsockopt((*sockfd)[i], SOL_SOCKET, SO_REUSEADDR, (char*)&one, sizeof(one)); check_res_dumpdie(res, addr, "setsockopt(SO_REUSEADDR)");