Heh, I see where you're going wrong.
ExcludeSingleHopRelay 1
andAllowSingleHopCircuits 0
are default and explicitly specifying them is redundant, I assume you've copied and pasted those options from someone who also doesn't know what they're doing.Your white and blacklist approach is weird (and misconveived, a blacklist is redundant with a whitelist). To dispell your notion that "it prevents an adversary from using those against Tor by claiming to be one of those "unused" codes", I'd point out that GeoIP is normally known by what is reported in
whois
records.whois
is a plaintext protocol, there is no cryptographic validation that the record you receive is the same as the record that was sent and there is also little validation that what is contained in the record that was sent is accurate. It would be trivial for any adversary to fool this system through any number of means, IP addresses are not at all related to geographic location, this isn't how the internet works.You state "Tor doesn't seem to use those European circuits unless I access hidden services." This is because onion service circuits, any many other circuits do not "exit" to the Tor network, therefor
ExitNodes
andExcludeExitNodes
do not apply to anything except circuits which, since they are ferryingnot communicating application traffic to outsideout of the Tor network.
I was able on a fresh copy of Tails 2.6 to, as root, edit the torrc
and append ExitNodes {us}
and StrictNodes 1
then use the service tor reload
command and upon the generation of a series of circuits confirm that the exit chosen was always associated with the US in Tails' local GeoIP database.
Working as intended.