Como eu roteio o bittorrent através de uma segunda interface?

2

Eu consegui configurar o openvpn no meu roteador DD-WRT de tal forma que o túnel está funcionando e funcionando, mas que ele não interfere nas rotas (a configuração padrão quer que todo o tráfego passe por ele). / p>

Gostaria de encaminhar a porta 51413 no tun1 para um host específico na minha rede (192.168.77.145).

Eu também preciso mascarar as portas 6881-6890 para que elas sejam roteadas pelo tun1. Eu sei que isso envolve confusão / marcação de pacotes, e configuração de rotas manualmente também, mas faz 12 anos desde que eu sequer pensei sobre o iptables (eu acho que ainda tinha discagem na hora).

Existe alguma receita na internet em algum lugar que eu não estou tropeçando?

[editar]

Eu tenho experimentado com o tcpdump, e parece que o cliente que eu uso (Transmission on OSX) tem um recurso curioso: ele usa 51413 (configurável pelo usuário) como a porta de origem para todos os pacotes de saída e como destino para todos os pacotes recebidos. Mesmo quando eu procuro a porta 6881-6889 no tcpdump, essas são sempre a porta de origem para o terminal remoto, e está sempre sendo enviada para o 51413.

Então, isso é bem mais simples do que imaginei. Eu só preciso rotear / mascarar qualquer coisa com esse número de porta src através da interface tun1.

Acho que as regras do iptables podem ser algo como o seguinte:

# mark bittorrent packets
iptables -t mangle -A OUTPUT -p udp --sport 51413  -j MARK --set-mark 7
iptables -t mangle -A OUTPUT -p tcp --sport 51413  -j MARK --set-mark 7

# allow responses
iptables -A INPUT -i tun1 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# allow bittorrent
iptables -A INPUT -i tun1 -p udp --dport 51413 -j ACCEPT
iptables -A INPUT -i tun1 -p tcp --dport 51413 -j ACCEPT

# block everything incoming on vpn
#iptables -A INPUT -i tun1 -j REJECT

# masquerading
iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE

Isso parece sensato? Ainda não há pistas sobre as regras de roteamento.

[editar 2]

Eu acho que -A está errado, pois isso o anexa ao final das regras do iptables. Meu roteador está adicionando deus-sabe-o que primeiro, e se essas regras combinam, elas são ignoradas. Tenho certeza que todos eles devem ser -I.

Mesmo com essa mudança, não consigo fazer nada funcionar.

Os pacotes aparecem na minha rede privada na br0, a interface da bridge. Se eu não mudar nada, a configuração do DD-WRT fará o NAT passar pela vlan2. E, claro, a interface do OpenVPN é tun1 (a interface pela qual eu quero enviar o tráfego bt).

[editar 3]

As duas declarações iniciais do iptables estão erradas. Eu estava trabalhando em exemplos onde o autor estava usando sua máquina desktop como um roteador (eu acho), e isso é diferente de uma máquina de desktop que envia pacotes através de uma rede local para um roteador com duas interfaces externas. O conjunto correto de declarações é algo assim:

# routing table setup
ip route replace default via $VPNGW dev tun1 table 100
ip rule add fwmark 7 table 100

# mark bittorrent packets
iptables -t mangle -I PREROUTING -p udp --sport 51413 -j MARK --set-mark 7
iptables -t mangle -I PREROUTING -p tcp --sport 51413 -j MARK --set-mark 7

# allow responses
iptables -A INPUT -i tun1 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# allow bittorrent
iptables -A INPUT -i tun1 -p udp --dport 51413 -j ACCEPT
iptables -A INPUT -i tun1 -p tcp --dport 51413 -j ACCEPT

# block everything incoming on vpn
iptables -A INPUT -i tun1 -j REJECT

# masquerading
iptables -t nat -I POSTROUTING -o tun1 -j MASQUERADE

Isso ainda não é perfeito. A maior parte do tráfego bt passa agora pelo tun1, mas continuo vendo pacotes de entrada para o 51413 no vlan2. Não está claro para mim porque isso está acontecendo.

    
por John O 30.08.2014 / 01:30

0 respostas