Estou tentando jogar um jogo de karaokê japonês no PS3, mas a latência é horrível e o download de músicas leva uma eternidade. Uma recomendação que recebi foi transformar meu laptop em um proxy SOCKS, efetuando login via OpenSSH no servidor de meu amigo no Japão.
[server] ---- (túnel ssh) --- [wlan0 <laptop> eth0] --- [PS3]
Então foi isso que eu fiz:
ssh -ND 4711 [email protected]
Naquele momento, tentei acessar o google.com no meu laptop usando o Firefox (com configurações de proxy SOCKS) e fui redirecionado para google.co.jp. Ótimo.
Então eu queria conectar meu PS3 ao meu laptop via Ethernet.
Primeiro, atribuai um IP estático a eth0 com:
ip link set dev eth0 up
ip addr add 139.96.30.100/24 dev eth0
Em seguida, iniciei um servidor DHCP no meu laptop para fornecer um IP ao PS3 com:
systemctl start dhcp4.service
E finalmente habilitei o NAT com alguma mágica do iptables:
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Eu fui para "Configurações de redes" e testei a conexão do meu PS3 e bom, parecia funcionar. Lancei o navegador e o google.com foi redirecionado para google.fr. Que idiota, eu esqueci de encaminhar a conexão para a porta certa.
Depois de muito encaminhamento de conexão através do iptables que não funcionou, decidi tentar usar um proxy transparente: redsocks. http://darkk.net.ru/redsocks/
Após a instalação, modifiquei o /etc/redsocks.conf para atender às minhas necessidades:
redsocks {
local_ip=0.0.0.0; // documentation says: "use 0.0.0.0 if you want to listen on every interface"
local_port=31388;
ip=127.0.0.1;
port=4711;
}
com o resto deixado de fora como em https://github.com/darkk/redsocks/blob/master/redsocks.conf.example
Eu usei o redsocks.rules básico fornecido no pacote que instalei:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:REDSOCKS - [0:0]
# Redirect all output through redsocks
-A OUTPUT -p tcp -j REDSOCKS
# Whitelist LANs and some other reserved addresses.
# https://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses
-A REDSOCKS -d 0.0.0.0/8 -j RETURN
-A REDSOCKS -d 10.0.0.0/8 -j RETURN
-A REDSOCKS -d 127.0.0.0/8 -j RETURN
-A REDSOCKS -d 169.254.0.0/16 -j RETURN
-A REDSOCKS -d 172.16.0.0/12 -j RETURN
-A REDSOCKS -d 192.168.0.0/16 -j RETURN
-A REDSOCKS -d 224.0.0.0/4 -j RETURN
-A REDSOCKS -d 240.0.0.0/4 -j RETURN
# Redirect everything else to redsocks port
-A REDSOCKS -p tcp -j REDIRECT --to-ports 31338
COMMIT
Isso me permitiu parar de usar as configurações de proxy do SOCKS no Firefox e no luakit, que eu confirmei com o google.com se transformando no teste google.co.jp.
Achei que ainda precisava ativar o NAT, então refiz:
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Aparentemente, o PS3 ignorou o proxy em todo o sistema e o google.com foi redirecionado para google.fr. Eu então usei o arquivo redsocks.rules como estava sem mascarar. Eu acreditava que, de qualquer maneira, não precisaria do NAT, pois o servidor redsocks aparentemente escuta em todas as interfaces.
Tentei conectar o PS3 novamente e recebi a seguinte mensagem (depois que o PS3 adquiriu um IP do meu servidor DHCP e falhou ao obter uma conexão à Internet):
"Ocorreu um erro durante a comunicação com o servidor. Este é um erro de DNS."
É onde eu estou agora. Eu acho que pode haver um problema com redsocks, já que ele usa um servidor DNS chamado dnstc, que faz isso de acordo com a documentação:
dnstc {
// fake and really dumb DNS server that returns "truncated answer" to
// every query via UDP, RFC-compliant resolver should repeat same query
// via TCP in this case.
local_ip = 127.0.0.1;
local_port = 5300;
}
Meu palpite é que meu PS3 solicite resolução de DNS via UDP e que o dnstc responda com "resposta truncada" o tempo todo. Se bem entendi, ele deve reenviar a solicitação através do TCP, mas aparentemente produz um erro de DNS?
O que devo fazer? Ou, mais precisamente:
- Redsocks é desnecessário? Eu sou apenas iptables-analfabeto?
- Devo instalar um servidor DNS e encaminhar as solicitações de DNS? Se sim, como?
Obrigado por ler essa parede de texto! Espero que não seja demais para uma primeira pergunta ...
UDP DNS -> dnstc -> TCP DNS -> gets picked up by redsocks and redirected.
se é por isso que a solicitação de DNS não está retornando, talvez, adicionando os IPs do servidor DNS à lista de permissões dos redsocks, isso permitiria que a solicitação de DNS do TCP passasse.