Próbuję ustawić przekaźnik tor.
Aby umożliwić torowi przedstawienie statycznej strony internetowej wyjaśniającej, co to jest, chcę, aby serwer nasłuchiwał na portach 80 i 443.
Aby umożliwić Torowi korzystanie z rozliczania / hibernacji (przepustowość przepustnicy po osiągnięciu limitu danych) potrzebuję procesu powiązania z> 1024 numerami portów (tak, że nieuprzywilejowany użytkownik może przyporządkować porty, jak sądzę).
Stąd moja konfiguracja Tora wygląda tak:
ORPort 443 NoListen
ORPort 127.0.0.1:9090 NoAdvertise
DirPort 80 NoListen
DirPort 127.0.0.1:9091 NoAdvertise
DirPortFrontPage /etc/tor/tor-exit-notice.html
Po uruchomieniu serwera mogę uzyskać dostęp do pliku HTML lokalnie:
$ wget 127.0.0.1:9091
--2013-08-12 14:27:49-- http://127.0.0.1:9091/
Connecting to 127.0.0.1:9091... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6762 (6.6K) [text/html]
Saving to: `index.html'
100%[=============================>] 6,762 --.-K/s in 0.005s
2013-08-12 14:28:15 (1.21 MB/s) - `index.html' saved [6762/6762]
I porty wydają się być poprawnie otwarte:
$ sudo netstat -lnp | grep tor
tcp 0 0 127.0.0.1:9050 0.0.0.0:* LISTEN 6328/tor
tcp 0 0 127.0.0.1:9090 0.0.0.0:* LISTEN 6328/tor
tcp 0 0 127.0.0.1:9091 0.0.0.0:* LISTEN 6328/tor
Aby ostatnia część działała, gdzie przekierowano połączenia na 0.0.0.0:80 do 127.0.0.1:9091, próbowałem użyć iptables.
$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 443 -j DNAT --to-destination 127.0.0.1:9090
$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to-destination 127.0.0.1:9091
$ sudo iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 to:127.0.0.1:9090
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:127.0.0.1:9091
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Ale kiedy podłączam się do zewnętrznego adresu IP na porcie 80, nie otrzymuję odpowiedzi.
Próbowałem z ip_forward zarówno włączania i wyłączania, żadne nie działa:
$ sudo sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
$ sudo sysctl net.ipv4.ip_forward=0
net.ipv4.ip_forward = 0
Próbowałem nawet MASQUERADE-ing, ale to nie działa i nie sądzę, że powinno być konieczne:
$ sudo iptables -t nat -A POSTROUTING -j MASQUERADE
Próbowałem również PREROUTING według poniższych sugestii, ale to nie działa:
$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to-port 127.0.0.1:9091
iptables v1.4.14: REDIRECT: Bad value for "--to-ports" option: "127.0.0.1:9091"
Try `iptables -h' or 'iptables --help' for more information.
Co ja robię źle?
Serwer to raspberry pi, działa wheezy z tylko wbudowanym interfejsem sieciowym podłączonym bezpośrednio do Internetu za pomocą publicznego adresu IP.
iptables v1.4.14: REDIRECT: Bad value for "--to-ports" option: "127.0.0.1:9091"
Możesz spróbować włączyć routing do hosta lokalnego w jądrze:
sysctl -w net.ipv4.conf.eth0.route_localnet=1
kiedyeth0
jest karta sieciowa komputera.Zobacz akceptowaną odpowiedź na ten post: https://unix.stackexchange.com/questions/111433/iptables-redirect-outside-requests-to-127-0-0-1
źródło