[tor-bugs] #32604 [Core Tor/Tor]: Add HiddenServiceExportRendPoint and HiddenServiceExportInstanceID directive

Tor Bug Tracker & Wiki blackhole at torproject.org
Wed Dec 4 02:21:43 UTC 2019


#32604: Add HiddenServiceExportRendPoint and HiddenServiceExportInstanceID
directive
-----------------------------------------+---------------------------------
 Reporter:  moonsikpark                  |          Owner:  (none)
     Type:  enhancement                  |         Status:
                                         |  needs_information
 Priority:  Medium                       |      Milestone:  Tor:
                                         |  0.4.3.x-final
Component:  Core Tor/Tor                 |        Version:
 Severity:  Normal                       |     Resolution:
 Keywords:  tor-hs tor-dos extra-review  |  Actual Points:
Parent ID:  #32511                       |         Points:
 Reviewer:  dgoulet, ahf                 |        Sponsor:  Sponsor27-can
-----------------------------------------+---------------------------------

Comment (by teor):

 Replying to [comment:9 ahf]:
 > I left some comments there. I think my biggest question is what is the
 IPv6 story in this? Encoding a 32-bit IPv4 address in an IPv6 address is
 smart, but encoding an IPv6 address in an IPv6 address whilst still
 leaving space for other data is going to be difficult.

 The PROXY protocol has 2 address fields and 2 port fields:
 `PROXY TCP6 (SOURCE_IPV6) (DEST_IPV6) (SOURCE_PORT) (DEST_PORT)`

 In the current Tor network, Tor relays must have one IPv4 address and
 port, and can optionally have an IPv6 address and port.

 So here's the information we might want to capture:
 * REND_IPV4 (4 bytes)
 * REND_IPV4_PORT (2 bytes)
 * REND_IPV6 (16 bytes)
 * REND_IPV6_PORT (2 bytes)
 * INSTANCE_ID (2 bytes)
 * CIRCUIT_ID (4 bytes)

 And here's how this patch does that:
 `PROXY TCP6
 (RESERVED_4_BYTES|REND_IPV4|REND_IPV4_PORT|INSTANCE_ID|CIRCUIT_ID)
 (DEST_IPV6?) (UNKNOWN?) (DEST_PORT?)`

 If we ever need to capture the IPv6 address and port:

 If we can use DEST_IPV6 and DEST_PORT:
 * Use DEST_IPV6 for REND_IPV6
 * Use DEST_PORT for REND_IPV6_PORT

 If we can't, we only have 4 bytes left to store 18 bytes, so we hash the
 IPv6 and port, and use the first 4 bytes:
 * RESERVED_4_BYTES = H(REND_IPV6|REND_IPV6_PORT)[:4]

 I think we can make this decision later?

 But we should definitely document that IPv6 is not supported, and that the
 address is the canonical IPv4 address of the rend point. (And not
 guaranteed to be the actual address that the circuit is connecting
 through.)

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/32604#comment:10>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list