Azure/azure-relay-bridge

Confusing log when forwarding a port to a different port and omitting PortName

congyiwu opened this issue · 0 comments

I built 90d1b45 Fix typo in RelayBridgeService.cs
All commands are in PowerShell in Windows 10

If I use a different port number in RemoteForward and LocalForward, the relay doesn't work, b/c PortName defaults to the port number, and the PortName on both sides won't match. This causes the request to be rejected:

if (remoteForwarders.TryGetValue(portName, out var forwarder))

In retrospect, it makes sense that PortName is required in my scenario, but there are no useful error messages for either the HTTP request that was made, or the relay logs on either end. I had to attach a debugger and step through the code to figure out what I did wrong.

I'd expect an error somewhere saying that PortName "8888" couldn't be found.

C:\Temp\client.yml:

LocalForward:
- RelayName: relayName
  ConnectionString: <connection string>
  BindAddress: 127.0.0.1
  BindPort: 8888

Client command line output:

& "C:\Program Files\Azure Relay Bridge\azbridge.exe" -f 'C:\Temp\client.yml'
info: azbridge[0]
      [1/31/2020 8:50:07 AM], RemoteForwardHostStart, 75b719c7-4155-42ae-9901-2cd466db3f3b,
info: azbridge[0]
      [1/31/2020 8:50:07 AM], LocalForwardListenerStart, 5200003c-46d1-462c-a4b5-a08b07e97806, { localEndpoint = 127.0.0.1:8888 }      info: azbridge[0]
      [1/31/2020 8:50:07 AM], LocalForwardBridgeStart, 1f7e24f4-0c1a-4f90-bb22-2201dfbb827f, { bindToAddress = 127.0.0.1, localForward = Microsoft.Azure.Relay.Bridge.Configuration.LocalForward }
info: azbridge[0]
      [1/31/2020 8:50:07 AM], LocalForwardHostStart, 9566fb1b-da5f-4518-9667-6ea663ab7a0d,
info: azbridge[0]
      [1/31/2020 8:50:34 AM], LocalForwardSocketComplete, e00e8d02-0bd9-475f-947b-4a7dad30d786, { endpoint = 127.0.0.1:8888 }
info: azbridge[0]
      [1/31/2020 8:50:34 AM], LocalForwardSocketClosed, e00e8d02-0bd9-475f-947b-4a7dad30d786, { socket = 127.0.0.1:8888 }
info: azbridge[0]
      [1/31/2020 8:50:35 AM], LocalForwardSocketComplete, 9fc504aa-6edc-41af-a183-f569e944715b, { endpoint = 127.0.0.1:8888 }
info: azbridge[0]
      [1/31/2020 8:50:35 AM], LocalForwardSocketClosed, 9fc504aa-6edc-41af-a183-f569e944715b, { socket = 127.0.0.1:8888 }

C:\Temp\server.yml:

RemoteForward:
- RelayName: relayName
  ConnectionString: <connection string>
  Host: neverssl.com
  HostPort: 80

Server command line output:

& "C:\Program Files\Azure Relay Bridge\azbridge.exe" -f 'C:\Temp\server.yml'
info: azbridge[0]
      [1/31/2020 8:50:05 AM], RemoteForwardBridgeOnline, bdabc540-b609-4723-9788-1e17596601ce, { hybridConnectionUri = sb://machinemanagementfa34a16.servicebus.windows.net/devfabric, tcpRemoteForwardBridge = Microsoft.Azure.Relay.Bridge.RemoteForwardBridge }
info: azbridge[0]
      [1/31/2020 8:50:05 AM], RemoteForwardBridgeStart, bdabc540-b609-4723-9788-1e17596601ce, { uri = sb://machinemanagementfa34a16.servicebus.windows.net/devfabric }
info: azbridge[0]
      [1/31/2020 8:50:05 AM], RemoteForwardHostStart, 25af2834-aa01-4303-97b8-9bda0b848726,
info: azbridge[0]
      [1/31/2020 8:50:05 AM], LocalForwardHostStart, 4d6446bc-bb61-4614-ab7f-417533819f66,

The HTTP request I tried to make:

wget http://127.0.0.1:8888 -UseBasicParsing
wget : The underlying connection was closed: An unexpected error occurred on a receive.
At line:1 char:1
+ wget http://127.0.0.1:8888 -UseBasicParsing
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand