Iptables Ajudar a redirecionar portas TCP / UDP específicas para VPN (tun1)

0

Portanto, eu tenho um roteador baseado em Linux e tenho um cliente vpn configurado para rotear o tráfego através dos comandos vpn e isp per iptables Eu estou tentando rotear o tcp específico e todas as portas udp através da vpn apenas e usando o tcpdump para verificar, mas não consigo fazê-lo funcionar aqui está o código que eu tenho usado

iptables -t mangle -A PREROUTING -i br0 -p tcp -m multiport --dport ! 20,21,22,80,81,443,8080 -j MARK --set-mark 2

iptables -t mangle -A PREROUTING -i br0 -p udp -j MARK --set-mark 2

em que "2" é a tabela da VPN (na minha tabela de casos 10) e onde "1" tabela ISP (tabela 100)

o script tem outras funções relacionadas ao roteamento que funcionam corretamente para mover ips específicos para a vpn e um kill switch

o conceito é que eu estou tentando executar um cliente de torrent fora do próprio roteador (interno "lan" 192.168.1.1) e eu quero que todos os udp e todas as portas tcp que NÃO estão listadas acima usem a vpn enquanto o resto vai através do isp

Foi-me dito que eu talvez precise usar as opções INPUT OUTPUT AND FORWARD também, mas apesar da leitura eu não consigo fazer as portas rotearem corretamente, meu script acaba travando e travando o roteador ou eu acabo sem tráfego em tudo para a internet via vpn ou o isp

aqui está o meu script sem a seção ports, já que o removi da fustiration

#!/bin/sh

main() {

for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
  echo 0 > $i
done

ip route flush table 100

ip rule del fwmark 1 table 100

ip route del default table 100

ip rule del fwmark 2 table 10

ip route flush cache

iptables -t mangle -F INPUT

iptables -t mangle -F OUTPUT

iptables -t mangle -F FORWARD

iptables -t mangle -F PREROUTING

iptables -t mangle -F POSTROUTING

iptables -t mangle -F

ip route show table main | grep ^default | grep -Ev tun1 \
  | while read ROUTE ; do
      ip route add table 100 $ROUTE
done

ip route add default table 100 via 
$(nvram get wan_gateway)

ip rule add fwmark 1 table 100

ip rule add fwmark 2 table 10

ip route flush cache
}

int() {
iptables -t mangle -A PREROUTING -i "$1" -j MARK --set-mark 1
}

adr() {
iptables -t mangle -A PREROUTING -i br0 -s "$1" -j MARK --set-mark 2
}

kills() {
iptables -I FORWARD -s "$1" -o eth0 -j DROP
}

main

int br0

adr 192.168.1.115/32

adr 192.168.1.119/32

adr 192.168.1.147/32

kills 192.168.1.115/32

kills 192.168.1.119/32

kills 192.168.1.147/32

exit 0

Eu tenho o meu roteador configurado onde o padrão é trafegar pelo isp não a vpn

    
por Cyrus Wolf 19.06.2016 / 22:07

1 resposta

0

Uma chave para entender isso é o fato de os pacotes para ou do host do roteador terem um caminho diferente em iptables do que os que passam pelo roteador. Você pode google iptables-chains.png e acompanhar algumas imagens, por exemplo, link .

A foto geral no link também é bastante útil para criar regras iptables .

Especificamente, a cadeia PREROUTING da tabela mangle aplica-se apenas aos pacotes incoming , o que é bom para os pacotes encaminhados (remoto para remoto) enquanto você deseja direcionar os pacotes de saída para o tráfego local-remoto do roteador. Assim, as configurações de regra iniciais acima devem ser para a cadeia OUTPUT da tabela mangle para direcionar o tráfego de local para remoto.

    
por 20.06.2016 / 07:13