net/portmapper: handle pcp ADDRESS_MISMATCH response

These show up a fair amount in our logs.

Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
Josh Bleecher Snyder 2021-11-23 13:49:47 -08:00 committed by Josh Bleecher Snyder
parent bb91cfeae7
commit 999814e9e1
2 changed files with 10 additions and 0 deletions

View File

@ -28,6 +28,12 @@ const (
pcpCodeOK = 0
pcpCodeNotAuthorized = 2
// From RFC 6887:
// ADDRESS_MISMATCH: The source IP address of the request packet does
// not match the contents of the PCP Client's IP Address field, due
// to an unexpected NAT on the path between the PCP client and the
// PCP-controlled NAT or firewall.
pcpCodeAddressMismatch = 12
pcpOpReply = 0x80 // OR'd into request's op code on response
pcpOpAnnounce = 0

View File

@ -791,6 +791,10 @@ func (c *Client) Probe(ctx context.Context) (res ProbeResult, err error) {
// provide port mapping services.
res.PCP = false
continue
case pcpCodeAddressMismatch:
// A PCP service is running, but it is behind a NAT, so it can't help us.
res.PCP = false
continue
default:
// Fall through to unexpected log line.
}