Skip to content

Commit

Permalink
Force combinationation of --socks-proxy and --proto UDP to use IPv4.
Browse files Browse the repository at this point in the history
Our current socks.c code does not handle IPv6 + UDP mode (socket
negotiated with server is IPv4-only, addresses passed in the
packets are IPv4-only).  If this combination is specified, print
an explanatory message and force IPv4-only.

While at it, extend socks.c code to print address+port of auxiliary
UDP connection to SOCKS server (helps debugging).

Trac: #1221

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Antonio Quartulli <antonio@openvpn.net>
Message-Id: <20191020150039.21516-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg18952.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
  • Loading branch information
cron2 committed Oct 28, 2019
1 parent bb1ea49 commit 57623b4
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/openvpn/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -2825,6 +2825,24 @@ options_postprocess_mutate_ce(struct options *o, struct connection_entry *ce)
#endif
}

/* our socks code is not fully IPv6 enabled yet (TCP works, UDP not)
* so fall back to IPv4-only (trac #1221)
*/
if (ce->socks_proxy_server && proto_is_udp(ce->proto) && ce->af != AF_INET)
{
if (ce->af == AF_INET6)
{
msg(M_INFO, "WARNING: '--proto udp6' is not compatible with "
"'--socks-proxy' today. Forcing IPv4 mode." );
}
else
{
msg(M_INFO, "NOTICE: dual-stack mode for '--proto udp' does not "
"work correctly with '--socks-proxy' today. Forcing IPv4." );
}
ce->af = AF_INET;
}

/*
* Set MTU defaults
*/
Expand Down
4 changes: 4 additions & 0 deletions src/openvpn/socks.c
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,10 @@ recv_socks_reply(socket_descriptor_t sd,
{
memcpy(&addr->addr.in4.sin_addr, buf + 4, sizeof(addr->addr.in4.sin_addr));
memcpy(&addr->addr.in4.sin_port, buf + 8, sizeof(addr->addr.in4.sin_port));
struct gc_arena gc = gc_new();
msg(M_INFO, "SOCKS proxy wants us to send UDP to %s",
print_sockaddr(addr, &gc));
gc_free(&gc);
}


Expand Down

0 comments on commit 57623b4

Please sign in to comment.