Require("IPV6") # By default, Authorities are not configured as exits Authority = Node(tag="a", authority=1, relay=1, torrc="authority.tmpl") ExitRelay = Node(tag="r", relay=1, exit=1, torrc="relay.tmpl") Client = Node(tag="c", client=1, torrc="client.tmpl") BridgeAuthority = Node(tag="ba", authority=1, bridgeauthority=1, relay=1, torrc="bridgeauthority.tmpl") Bridge = Node(tag="br", bridge=1, relay=1, torrc="bridge.tmpl") BridgeIPv6 = Node(tag="br", bridge=1, relay=1, ipv6_addr="[::1]", torrc="bridge-v6.tmpl") BridgeClient = Node(tag="bc", client=1, bridgeclient=1, torrc="bridgeclient.tmpl") HSv2 = Node(tag="h", hs=1, torrc="hs.tmpl") HSv3 = Node(tag="h", hs=1, torrc="hs-v3.tmpl") # We need 5 authorities/relays/exits to ensure we can build HS connections # We put the IPv6 bridge first to ensure that clients try IPv6 before IPv4 # Unfortunately, this does not prevent clients falling back to IPv4 # bridges+ipv6-min only has IPv6 bridges NODES = Authority.getN(3) + BridgeAuthority.getN(1) + \ ExitRelay.getN(4) + \ BridgeIPv6.getN(1) + Bridge.getN(1) + \ Client.getN(1) + BridgeClient.getN(1) + \ HSv2.getN(1) + HSv3.getN(1) ConfigureNodes(NODES)