osbase/socksproxy: implement hostname addresses
This is required by quite a few clients, like Chrome. Implement it for
better usability of our userspace network while debugging.
Change-Id: I5db16d3702800b79f88d11c132ce8f7469839ec4
Reviewed-on: https://review.monogon.dev/c/monogon/+/3842
Tested-by: Jenkins CI
Reviewed-by: Leopold Schabel <leo@monogon.tech>
diff --git a/metropolis/test/nanoswitch/socks.go b/metropolis/test/nanoswitch/socks.go
index 4ba1d0a..15e0f81 100644
--- a/metropolis/test/nanoswitch/socks.go
+++ b/metropolis/test/nanoswitch/socks.go
@@ -23,16 +23,29 @@
func (s *socksHandler) Connect(ctx context.Context, req *socksproxy.ConnectRequest) *socksproxy.ConnectResponse {
logger := supervisor.Logger(ctx)
- target := net.JoinHostPort(req.Address.String(), fmt.Sprintf("%d", req.Port))
-
- if len(req.Address) != 4 {
- logger.Warningf("Connect %s: wrong address type", target)
- return &socksproxy.ConnectResponse{
- Error: socksproxy.ReplyAddressTypeNotSupported,
+ var target string
+ var addr net.IP
+ if req.Hostname == "" {
+ target = net.JoinHostPort(req.Address.String(), fmt.Sprintf("%d", req.Port))
+ if req.Address.To4() == nil {
+ logger.Warningf("Connect %s: wrong address type", target)
+ return &socksproxy.ConnectResponse{
+ Error: socksproxy.ReplyAddressTypeNotSupported,
+ }
}
+ addr = req.Address
+ } else {
+ target = net.JoinHostPort(req.Hostname, fmt.Sprintf("%d", req.Port))
+ ip, err := net.ResolveIPAddr("ip", req.Hostname)
+ if err != nil {
+ logger.Warningf("Connect %s: while resolving hostname: %v", target, err)
+ return &socksproxy.ConnectResponse{
+ Error: socksproxy.ReplyAddressTypeNotSupported,
+ }
+ }
+ addr = ip.IP
}
- addr := req.Address
switchCIDR := net.IPNet{
IP: switchIP.Mask(switchSubnetMask),
Mask: switchSubnetMask,