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.
Tags bittorrent iptables routing dd-wrt