Redirecionar trafego por interface

1. Redirecionar trafego por interface

Matheus Ferrari
mhmferrari

(usa Outra)

Enviado em 12/01/2016 - 09:33h

Bom dia,
Pessoal sou novo com linux e estou enfrentando algumas dificuldades...
Preciso criar uma rota com o Itables para direcionar todo o trafego de navegação facebook,youtube,whatsaap etc... para um interface especifica para que não sobrecarregue o link principal. Eu conseguiria fazer isso utilizando apenas as strings ao invés de fazer por IP?

Agradeço desde já!


  


2. Re: Redirecionar trafego por interface

Buckminster
Buckminster

(usa Debian)

Enviado em 12/01/2016 - 12:19h

Por exemplo, a regra

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

redireciona todo o tráfego que entra (-i) pela eth1 na porta 80 para a porta 3128 (no caso, a porta do Squid).


Vou te dar uma sugestão:

for i in 'cat /etc/lista.txt'
do

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -t mangle -A PREROUTING -s $i -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -d $i -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -s $i -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -d $i -j MARK --set-mark 2
ip rule add fwmark 2 table 20 prio 20
ip route add default via xxx.xxx.xxx.xxx dev ethy table 20
ip route flush cache

done


Mas veja bem, caso tu tiver Squid na rede tenha o cuidado de o Squid não bloquear os sites dentro do arquivo lista.txt.
No lugar de eth1 e eth2 coloque as placas de rede dos links que tu tem, se tiver mais de dois acrescente mais uma regra.

IMPORTANTE: Em ethy tu coloca a placa de rede para a qual tu quer que os pacotes sejam direcionados.
Em xxx.xxx.xxx.xxx coloque o IP (gateway) da placa de rede ethy.
Dentro do arquivo lista.txt tu coloca os domínios e/ou sites (facebook.com, youtube.com, www.site.com.br, etc, um por linha).
Recomendo fortemente que coloque somente URLs completas de sites, por exemplo, www.site.com.br, em vez de domínios.
O caminho do arquivo lista.txt pode ser outro à tua escolha em vez de /etc/lista.txt.

Tu podes também colocar -I em vez de -A:
-A adiciona a regra na seqüência em que ela está no script (ou seja, a regra será lida e executada na ordem em que estiver no script do Iptables);
-I adiciona a regra no início da chain (no caso POSTROUTING, ou seja, a regra será executada primeiro que outra regra com -A independentemente da posição dela no script).
Com -I tu podes numerar as regras, exemplo:

for i in 'cat /etc/lista.txt'
do

iptables -t nat -I POSTROUTING 1 -o eth1 -j MASQUERADE
iptables -t nat -I POSTROUTING 2 -o eth2 -j MASQUERADE
iptables -t mangle -I PREROUTING 1 -s $i -j MARK --set-mark 2
iptables -t mangle -I PREROUTING 2 -d $i -j MARK --set-mark 2
iptables -t mangle -I OUTPUT 1 -s $i -j MARK --set-mark 2
iptables -t mangle -I OUTPUT 2 -d $i -j MARK --set-mark 2
ip rule add fwmark 2 table 20 prio 20
ip route add default via xxx.xxx.xxx.xxx dev ethy table 20
ip route flush cache

done

Basicamente marquei os pacotes que entram/saem para os sites/domínios colocados dentro do arquivo lista.txt e direcionei eles para a placa/gateway do link desejado.

Tu poderás ter um problema de leve lentidão para os sites que estão dentro do arquivo, pois o Iptables não lida muito bem com consultas remotas ao DNS. Mas faça esse teste, acredito que a lentidão não será muito significativa.
Caso não funcionar, verifique as outras regras que tu tem no Iptables.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts