[Resolvido]Script iptables com dois links

Iniciado por olikoloko, 26 de Maio de 2014, 19:20

tópico anterior - próximo tópico

olikoloko

Bom galera sou iniciante em administração de redes e basicamente peguei este script aqui(http://www.vivaolinux.com.br/artigo/Dois-links-de-ADSL-em-um-mesmo-servidor)
e dei uma modificada por que preciso que os pacotes RDP PCoIP SMTP e POP passem pelo meu link de 40mb e o restante pelo link de 20mb
o meu GW_LINKNET não está com o ip certo pois sou novo na empresa e estou apenas montando o firewall ainda, mas depois mudarei.
a minha dpuvida é:
Ok terei 3 placas de rede, a Eth1 e a Eht2 serão a entrada e saida dos links e a minha eth0 será a entrada/saida da minha lan,
a minha Eth2 vem de um router e a Eth1 será direto do cable modem e a minha eth0 de um switch, no meio de todas essas placas de rede e routers e switches estou com duvida em relação aos ips das placas de rede, se alguém puder me ajudar em relação a isto será ótimo :):):):)

=====================================================================================
Nuvem 40mb =====Router--------\
                     
                                                  firewall" ------------ Switch --------- LAN

Nuvem 20mb--------------------------/

########== fibra
========================================================================



abaixo o script que colocarei no /etc/init.d/rotas



#!/bin/sh

# Interface da Intranet
IF_LAN='eth0'

# Interfaces ADSL
IF_LINKFLIN='eth1'
IF_LINKNET='eth2'

# Gateways dos ADSL (IPs dos roteadores)
GW_LINKNET='10.1.0.1'
GW_LINKFLIN='192.168.150.1'

# Mascarar saídas para os dois ADSL
------------------------------------------------------------
iptables -t nat -A POSTROUTING -o $IF_ADSL1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_ADSL2 -j MASQUERADE

# Marca com "2" os pacotes que saem pelas portas 25 (SMTP) e 110 (POP) RDP(3389) PCoIP(
------------------------------------------------------------
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 2 #Smtp
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 3389 -j MARK --set-mark 2 #RDP TCP
iptables -t mangle -A PREROUTING -i $IF_LAN -p udp --dport 3389 -j MARK --set-mark 2 #RDP UDP
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 110 -j MARK --set-mark 2 #POP TCP
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 50002 -j MARK --set-mark 2 #PCoIP TCP
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 4172 -j MARK --set-mark 2 #PcoIP TCP
iptables -t mangle -A PREROUTING -i $IF_LAN -p udp --dport 50002 -j MARK --set-mark 2 #PCoIP UDP
iptables -t mangle -A PREROUTING -i $IF_LAN -p udp --dport 4172 -j MARK --set-mark 2 #PCoIP UDP
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 2 #SMTP TCP
iptables -t mangle -A OUTPUT -p tcp --dport 3389 -j MARK --set-mark 2 #RDP TCP
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 2 #POP TCP
iptables -t mangle -A OUTPUT -p udp --dport 3389 -j MARK --set-mark 2 #RDP UDP
iptables -t mangle -A OUTPUT -p udp --dport 50002 -j MARK --set-mark 2 #PCoIP UDP
iptables -t mangle -A OUTPUT -p udp --dport 4172 -j MARK --set-mark 2 #PCoIP UDP
iptables -t mangle -A OUTPUT -p tcp --dport 50002 -j MARK --set-mark 2 #PcoIP tcp
iptables -t mangle -A OUTPUT -p tcp --dport 4172 -j MARK --set-mark 2 #PCoIP TCP

# Joga serviços de e-mail (pacotes marcados com 2) para o ADSL2
------------------------------------------------------------
ip rule add fwmark 2 table 20 prio 20
ip route add default via $GW_LINKFLIN dev $IF_ADSL2 table 20

# Atualiza tabela de roteamento
# ------------------------------------------------------------
ip route flush cache



e aqui vai o meu /etc/iproute2/rt_table



#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep

250 LINKFLIN
251 LINKNET


desde já agradeço a todos :))))

zekkerj

Opa, bakana seu script. Posso tentar te ajudar, mas antes quero que vc entenda uma coisa: vc só controla o tráfego que envia, e não o que recebe. Então mesmo vc fazendo os redirecionamentos, vc só vai poder forçar o tráfego que vem da sua rede local a sair/entrar pela interface escolhida. O tráfego iniciado na internet vai entrar pela interface determinada pelo endereço que a origem escolher.

Isso posto... vamos por a mão na massa?

Citar# Interface da Intranet
IF_LAN='eth0'

# Interfaces ADSL
IF_LINKFLIN='eth1'
IF_LINKNET='eth2'

Então estas são as nossas 3 interfaces, que vão ser referenciadas no script como $IF_LAN (rede local), $IF_LINKFLIN (link 20M, pelo q entendi) e $IF_LINKNET (link 40M). Guarde isso na memória!

Citar# Mascarar saídas para os dois ADSL
------------------------------------------------------------
iptables -t nat -A POSTROUTING -o $IF_ADSL1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_ADSL2 -j MASQUERADE

Aqui temos o primeiro problema... não temos essas variáveis "IF_ADSL1" e "IF_ADSL2" definidas; ao contrário, vc usou "IF_LINKFLIN" e "IF_LINKNET". Então a princípio basta vc substituir todas as ocorrências de "IF_ADSL1" por "IF_LINKNET", e "IF_ADSL2" por "IF_LINKFLIN". Ou exatamente o inverso, também pode funcionar.

Apesar de que eu acho que todos nós acabaríamos entendendo melhor se vc usasse as variáveis como "IF_LINK20M" e "IF_LINK40M", pois assim ficaria claro mais quem é quem.

O resto do script parece coerente pra mim, só não ficou claro pra mim se/como vc definiu a rota default. Ah, e se vc quer algum balanceamento de carga entre os dois.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

olikoloko

#2
Citar# Mascarar saídas para os dois ADSL
------------------------------------------------------------
iptables -t nat -A POSTROUTING -o $IF_LINKFLIN -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_LINKNET -j MASQUERADE
[/quote]
Citar
Aqui temos o primeiro problema... não temos essas variáveis "IF_ADSL1" e "IF_ADSL2" definidas; ao contrário, vc usou "IF_LINKFLIN" e "IF_LINKNET". Então a princípio basta vc substituir todas as ocorrências de "IF_ADSL1" por "IF_LINKNET", e "IF_ADSL2" por "IF_LINKFLIN". Ou exatamente o inverso, também pode funcionar.

Apesar de que eu acho que todos nós acabaríamos entendendo melhor se vc usasse as variáveis como "IF_LINK20M" e "IF_LINK40M", pois assim ficaria claro mais quem é quem.





O resto do script parece coerente pra mim, só não ficou claro pra mim se/como vc definiu a rota default. Ah, e se vc quer algum balanceamento de carga entre os dois.

Realmente eu esqueci de trocar as variáveis xD
Então esté é o problema estou com dúvida nisto, nas rotas default e nos ips a setar para as placas, pois segue o cenário:

Atualmente tenho este link da NET de 40mb que vem em uma fibra e passa por um router que do router vai pro switch e distribui na lan por dhcp
e este link de 20mb da Flin que está em um router wireless apenas. La onde eu trabalho o pessoas usa maquinas remotas ou como eles chamam VDI que usam os protocolos RDP e TCPoIP.

o que eu quero fazer lá é:

ao invés deste link de 40mb ir do router para o switch eu gostaria que ele passasse nesse meu firewall ficando assim: link de 40mb -> router-> (eth2)Firewall(Eth0) -> switch -> lan


e o link de 20mb eu iria limar o wireless dele por que ja temos um e colocar ele pra navegação normal e torrent


link 20mb -> eth1(firewal)eth0 -> switch -> lan

mas agora a dúvida do newbiemaster aqui que não quer calar quais ips setar para as placas de rede Eth0 eth1 e eth2 ou essas interfaces irão se auto configurar?



[edit]
    acho que estou começando a sacar eu tenho que definir um default gateway para minha rede local que seria o link de 20mb e ai meu script entraria em ação redirecionando estes pacotes(RDP PCOIP) para o link de 40mb é isso?
[/edit]

e Zekkrj vc é ninja Linux ahoeuaheuo :)

zekkerj

Então, cada interface vai corresponder a uma rede diferente, e uma faixa de endereços diferente. No caso, as redes das interfaces que vêm dos dois links vão ser definidas pelo administrador desses links (apesar de que eu imagino que vc tenha alguma gerência sobre o modem adsl do link de 20Mbps).

Tudo que resta fazer então é vc definir uma faixa de endereços para a rede local que seja diferente das outras duas. Pelo que estava no script, uma dos gateways seria "10.1.0.1", então a faixa dessa rede seria "10.1.0.0/24". Já o outro gateway seria "192.168.150.1", então a faixa dessa rede seria "192.168.150.0/24".

Vc poderia, então, usar para a rede local qualquer faixa que fosse diferente dessas duas, por exemplo, 172.16.100.0/24. A interface eth0, nesse caso, seria configurada como "172.16.100.1" com máscara "255.255.255.0". Cada uma das estações de trabalho da sua rede local teria que receber um IP dessa mesma rede, o que pode ser um porre a menos que vc configure também um servidor DHCP em seu servidor/firewall.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

olikoloko

Citação de: zekkerj online 26 de Maio de 2014, 20:53
Então, cada interface vai corresponder a uma rede diferente, e uma faixa de endereços diferente. No caso, as redes das interfaces que vêm dos dois links vão ser definidas pelo administrador desses links (apesar de que eu imagino que vc tenha alguma gerência sobre o modem adsl do link de 20Mbps).

Tudo que resta fazer então é vc definir uma faixa de endereços para a rede local que seja diferente das outras duas. Pelo que estava no script, uma dos gateways seria "10.1.0.1", então a faixa dessa rede seria "10.1.0.0/24". Já o outro gateway seria "192.168.150.1", então a faixa dessa rede seria "192.168.150.0/24".

Vc poderia, então, usar para a rede local qualquer faixa que fosse diferente dessas duas, por exemplo, 172.16.100.0/24. A interface eth0, nesse caso, seria configurada como "172.16.100.1" com máscara "255.255.255.0". Cada uma das estações de trabalho da sua rede local teria que receber um IP dessa mesma rede, o que pode ser um porre a menos que vc configure também um servidor DHCP em seu servidor/firewall.



dúvidas sanadíssimas e a idéia é colocar um dhcp também :)
Muito obrigado pelos esclarecimentos :)

olikoloko

Zekke, surgiu mais uma dúvida hahahaha


bom.. subi o DHCP, ok... mas é claro que eu preciso de navegação certo?


esses dois comandos aqui

iptables -t nat -A POSTROUTING -o $IF_LINKNET -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_LINKFLIN -j MASQUERADE

servem para que eu tenha navegação pelos dois links?

Arthur Bernardes

Respondendo por ele...

Sim, esses dois comandos ativam o mascaramento NAT nos dois link's.

zekkerj

Mais que isso... são eles que garantem que o tráfego que sai por um link vai voltar pelo mesmo link.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

olikoloko

leeegaaal!!!


Isso ai dúvida novamente sanada, essa semana ainda vou implementar isto e quando tudo estiver rodando direitinho vou estudar bem sobre iptables e iproute2 e fazer a minha contribuição ao fórum criando uma documentação sobre meu "laboratorio"



Muito obrigado.