+ Responder ao Tópico



  1. #1

    Padrão dividir 2 links

    Olá Pessoal, Tenho uma pequena grande dúvida. Estou tentando colocar aqui onde eu trabalho o seguinte 2 links, um Velox e o outro embratel, funcionando juntos na mesma rede. A minha configiração etá assim :

    eth0 - Velox (roteada) - ip 192.168.14.242 gt 192.168.14.1
    eth1 - embratel - ip 192.168.15.242 gt 192.168.15.1
    eth2 - rede interna - ip 192.168.0.1


    ao invés de balancear dois links quero dividir, fazendo assim: as maquinas da diretoria (192.168.0.10 192.168.0.9 ) saiam pela embratel e o outros ips saiam restante pela velox. Mas não encontrei nenhum exemplo prático sobre como dividir so encontrei para balancear ...

    Lembrando que as maquinas da rede aqui estão com ip fixo.
    e esqueci de mensionar que utilizo o squid ...

    Alguém poderia me ajudar ?

  2. #2

    Padrão

    Cara, você pode fazer isso com facilidade utilizando o roteamento por origem do iproute2.

    Aqui tem o link de uns tutos de como utilizar o iproute2:
    Roteamento avançado com Linux
    [Dicas-L] Roteamento avançado - Linux - utilizando IPROUTE e IPTABLES - Load Balance

    Se quiser mais opções:
    iproute2 roteamento por origem - Pesquisa Google

    Até mais..

  3. #3

    Padrão

    Ola Magnum e encontrei um script que parece ser exatamente o que preciso, porém acho que ele deve ter alguma coisa de errado pois quando coloco ele para funcionar só uma faixa de ip funciona (ex 192.168.0.10 ate 0 20) e a outra faixa de ip não acessa. Não fui eu quem desenvolveu o script mas adaptei e ele roda certinho a sem da erro na minha maquina, mas eu não tenho conhecimento para ver se tem algo faltando para que ele faça o que diz que faz vou postá-lo na esperança de alguem poder me ajudar

    #!/bin/bash

    clear

    echo "------------ FIREWALL ------------"

    ## iptables
    ipt=iptables

    ## link1
    link1_iface=eth1 # interface do seu link1
    link1_rede=192.168.15.0/24 # aqui você coloca sua rede, com máscara
    link1_gw=192.168.15.1 # o gateway do seu link1
    link1_ip_local=192.168.15.242 # o ip do seu server do link1

    ## link2
    link2_iface=eth0 # interface do seu link2
    link2_rede=192.168.14.0/24 # aqui você coloca sua rede, com máscara
    link2_gw=192.168.14.1 # o gateway do seu link2
    link2_ip_local=192.168.14.242 # o ip do seu server do link2

    ## rede local
    lan_iface=eth2
    lan_rede=192.168.0.0/24 # aqui você coloca sua rede com máscara
    lan_gw=192.168.0.254 # aqui coloca o gw da rede local


    # carregar módulos
    echo "Carregando módulos..."
    modprobe ip_tables
    modprobe iptable_nat
    modprobe iptable_mangle
    modprobe ip_nat_ftp
    modprobe ip_nat_h323
    modprobe ipt_limit
    modprobe ipt_tos


    # limpar regras
    echo "Limpando regras antigas..."
    $ipt -F
    $ipt -t nat -F
    $ipt -t mangle -F
    $ipt -X
    $ipt -t nat -X
    $ipt -t mangle -X


    # ação padrão - dropar tudo
    $ipt -P INPUT DROP
    $ipt -P FORWARD DROP
    $ipt -P OUTPUT ACCEPT


    # aceitar pacotes de retorno
    $ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $ipt -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


    # proteções
    # anti-ip spoofing - desativar por causa do iproute2
    if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
    for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 0 > $f
    done
    fi
    $ipt -A INPUT -i $link1_iface -s 192.168.0.0/255.255.0.0 -j DROP
    $ipt -A INPUT -i $link2_iface -s 192.168.0.0/255.255.0.0 -j DROP
    $ipt -A INPUT -i $link1_iface -s 172.0.0.0/255.0.0.0 -j DROP
    $ipt -A INPUT -i $link2_iface -s 172.0.0.0/255.0.0.0 -j DROP
    $ipt -A INPUT -i $link1_iface -s 10.0.0.0/255.0.0.0 -j DROP
    $ipt -A INPUT -i $link2_iface -s 10.0.0.0/255.0.0.0 -j DROP


    # ativando repasse de pacotes
    echo 1 > /proc/sys/net/ipv4/ip_dynaddr
    echo 1 > /proc/sys/net/ipv4/ip_forward


    # QoS
    $ipt -I FORWARD -p tcp --tcp-flags SYN,RST SYN --dport 1863 -j TCPMSS --clamp-mss-to-pmtu
    $ipt -I FORWARD -p tcp --tcp-flags SYN,RST SYN --dport 5190 -j TCPMSS --clamp-mss-to-pmtu
    $ipt -I FORWARD -p tcp --tcp-flags SYN,RST SYN --dport 7001 -j TCPMSS --clamp-mss-to-pmtu


    # liberar acesso interno
    echo "Liberando acesso local..."
    $ipt -A INPUT -i loopback -j ACCEPT
    $ipt -A INPUT -s 127.0.0.1 -j ACCEPT
    $ipt -A INPUT -s $link1_ip_local -j ACCEPT
    $ipt -A INPUT -s $link2_ip_local -j ACCEPT


    # serviços externos
    echo "Liberando acesso aos serviços..."
    # dns
    $ipt -A INPUT -p tcp --dport 53 -j ACCEPT
    $ipt -A INPUT -p udp --dport 53 -j ACCEPT
    $ipt -A INPUT -p tcp --sport 53 -j ACCEPT
    $ipt -A INPUT -p udp --sport 53 -j ACCEPT
    # retorno proxy
    $ipt -A INPUT -p tcp --dport 3128 --sport 80 -j ACCEPT
    $ipt -A INPUT -p tcp --dport 3128 --sport 8080 -j ACCEPT

    $ipt -A INPUT -i $lan_iface -p tcp --dport 22 -j ACCEPT
    $ipt -A INPUT -i $lan_iface -p tcp --dport 53 -j ACCEPT
    $ipt -A INPUT -i $lan_iface -p udp --dport 53 -j ACCEPT
    $ipt -A INPUT -i $lan_iface -p tcp --dport 80 -j ACCEPT
    $ipt -A INPUT -i $lan_iface -p tcp --dport 3128 -j ACCEPT

    echo "255 local" > /etc/iproute2/rt_tables
    echo "254 main" >> /etc/iproute2/rt_tables
    echo "253 default" >> /etc/iproute2/rt_tables
    echo "0 unspec" >> /etc/iproute2/rt_tables
    echo "30 link1" >> /etc/iproute2/rt_tables
    echo "30 link2" >> /etc/iproute2/rt_tables
    # remover rotas padrão - se houver
    ip route del default &> /dev/null
    ip route del default &> /dev/null
    ip route del default &> /dev/null

    ip rule del lookup link1 &> /dev/null
    ip rule del lookup link1 &> /dev/null
    ip rule del lookup link1 &> /dev/null
    ip rule del lookup link2 &> /dev/null
    ip rule del lookup link2 &> /dev/null
    ip rule del lookup link2 &> /dev/null

    for ip in `cat /etc/ips.link1`
    do
    ip rule del from $ip &> /dev/null
    done
    ip rule del from $link1_ip_local &> /dev/null
    # adicionar regras
    # detalhe antes de cat é uma crase "`" e não uma aspas simples
    for ip in `cat /etc/ips.link1`
    do
    ip rule add from $ip table link1 prio 30 &> /dev/null
    done
    ip rule add from $link1_ip_local table link1 prio 30
    # adicionar rotas
    ip route add $link1_ip_local via $link1_gw dev $link1_iface table link1
    ip route add default via $link1_gw table link1

    for ip in `cat /etc/ips.link2`
    do
    ip rule del from $ip &> /dev/null
    done
    ip rule del from $link2_ip_local &> /dev/null
    for ip in `cat /etc/ips.link2`
    do
    ip rule add from $ip table link2 prio 30 &> /dev/null
    done
    ip rule add from $link2_ip_local table link2 prio 30
    # adicionar rotas
    ip route add $link2_ip_local via $link2_gw dev $link2_iface table link2
    ip route add default via $link2_gw table link2

    # aplicar mudanças no iproute
    ip route flush cache


    echo -n "Liberando acesso para clientes..."
    # clientes link1
    for ip in `cat /etc/ips.link1`
    do

    # liberação de FORWARD
    $ipt -A FORWARD -s $ip -j ACCEPT

    # marcar pacotes para gráfico de consumo de banda
    $ipt -t mangle -A PREROUTING -s $ip -j ACCEPT # down
    $ipt -t mangle -A POSTROUTING -d $ip -j ACCEPT # up

    # mascaramento - radio uol
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.221.5.71 -j ACCEPT
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.221.8.74 -j ACCEPT
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.221.8.75 -j ACCEPT
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.221.8.118 -j ACCEPT

    # nat caixa econômica federal (conectividade)
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.201.0.0/16 --dport 80 -j ACCEPT

    # redirecionamento para o proxy
    $ipt -t nat -A PREROUTING -p tcp -s $ip --dport 80 -j REDIRECT --to-port 3128
    $ipt -t nat -A PREROUTING -p tcp -s $ip --dport 8080 -j REDIRECT --to-port 3128

    $ipt -t nat -A POSTROUTING -s $ip -d 0/0 -j SNAT --to $link1_ip_local

    echo -n "."

    done
    for ip in `cat /etc/ips.link2`
    do

    $ipt -A FORWARD -s $ip -j ACCEPT

    # marcar pacotes para gráfico de consumo de banda
    $ipt -t mangle -A PREROUTING -s $ip -j ACCEPT # down
    $ipt -t mangle -A POSTROUTING -d $ip -j ACCEPT # up

    # mascaramento - radio uol
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.221.5.71 -j ACCEPT
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.221.8.74 -j ACCEPT
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.221.8.75 -j ACCEPT
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.221.8.118 -j ACCEPT

    # nat caixa econômica federal (conectividade)
    $ipt -t nat -A PREROUTING -p tcp -s $ip -d 200.201.0.0/16 --dport 80 -j ACCEPT

    # redirecionamento para o proxy
    $ipt -t nat -A PREROUTING -p tcp -s $ip --dport 80 -j REDIRECT --to-port 3128
    $ipt -t nat -A PREROUTING -p tcp -s $ip --dport 8080 -j REDIRECT --to-port 3128

    $ipt -t nat -A POSTROUTING -s $ip -d 0/0 -j SNAT --to $link2_ip_local

    echo -n "."

    done
    echo ""
    echo "----------------------------------"

    Notem que ele faz a chamada de dois aquivos com duas faixas de ips ... Mas somente um dos aquivos funciona ... este script peguei em
    Linux: Controlando 2 links de internet (roteados) em um gateway Linux com SQUID [Artigo]
    Esse script pede para mecher no squid.conf que esta assim :
    http_port 3128 transparent

    hierarchy_stoplist cgi-bin ?
    acl QUERY urlpath_regex cgi-bin \?
    no_cache deny QUERY
    cache_mem 128 MB
    maximum_object_size_in_memory 128 KB
    maximum_object_size 32 MB
    minimum_object_size 0 KB
    cache_swap_low 90
    cache_swap_high 95
    cache_dir ufs /var/spool/squid 512 16 256
    cache_access_log /var/log/squid/access.log
    visible_hostname kurumin
    ftp_user [email protected]
    refresh_pattern ^ftp: 15 20% 2280
    refresh_pattern ^gopher: 15 0% 2280
    refresh_pattern . 15 20% 2280
    acl all src 0.0.0.0/0.0.0.0
    acl manager proto cache_object
    acl localhost src 127.0.0.1/255.255.255.255
    acl SSL_ports port 443 563
    acl Safe_ports port 80 # http
    acl Safe_ports port 21 # ftp
    acl Safe_ports port 443 563 # https, snews
    acl Safe_ports port 70 # gopher
    acl Safe_ports port 210 # wais
    acl Safe_ports port 1025-65535 # unregistered ports
    acl Safe_ports port 280 # http-mgmt
    acl Safe_ports port 488 # gss-http
    acl Safe_ports port 591 # filemaker
    acl Safe_ports port 777 # multiling http
    acl Safe_ports port 901 # SWAT
    acl purge method PURGE
    acl CONNECT method CONNECT

    http_access allow manager localhost
    http_access deny manager
    http_access allow purge localhost
    http_access deny purge
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    http_access allow localhost


    #acl livre src "/etc/squid/conf/livre"
    #http_access allow livre

    #acl proibidos url_regex -i "/etc/squid/conf/proibidos"
    #http_access deny proibidos

    #acl bloqueados url_regex -i "/etc/squid/conf/bloqueados"
    #http_access deny bloqueados


    # proibe downloads das extensoes que estão no arquivo down

    #acl down urlpath_regex -i "/etc/squid/conf/down"
    #http_access deny down

    # bloqueia o uso do msn exeto os liberados no arquivo livre

    #acl msn url_regex -i /gateway/gateway.dll
    #http_access deny msn

    # ----------REGRA------------------------
    # criando as acls
    #acl ips_link1 src "/etc/ips.link1"
    #tcp_outgoing_address 192.168.15.242 ips_link1
    #acl ips_link2 src "/etc/ips.link2"
    #tcp_outgoing_address 192.168.14.242 ips_link2

    # ----------------------------------

    #http_access allow ips_link1
    #http_access allow ips_link2

    acl redelocal src 192.168.0.0/24

    http_access allow redelocal
    http_access deny all
    Última edição por dogman; 02-02-2009 às 12:39.

  4. #4

    Padrão

    Ok... Acho que esse seu script ta sobrecarregado com coisas que você não precisa. Mas vamos fazer uns testes com ele pra tentar descobrir o que pode estar havendo.

    1. Do host 192.168.0.10 ou 192.168.0.9 (diretoria) execute um ping para os ips 192.168.15.242 e 192.168.15.1.
    2. De qualquer outro hosts (exceto os da diretoria) execute um ping para os ips 192.168.14.242 e 192.168.14.1.

    Poste os resultados ai... Se até ai sair tudo ok, vamos fazer outros testes.

  5. #5

    Padrão

    Citação Postado originalmente por Magnun Ver Post
    Ok... Acho que esse seu script ta sobrecarregado com coisas que você não precisa. Mas vamos fazer uns testes com ele pra tentar descobrir o que pode estar havendo.

    1. Do host 192.168.0.10 ou 192.168.0.9 (diretoria) execute um ping para os ips 192.168.15.242 e 192.168.15.1.
    2. De qualquer outro hosts (exceto os da diretoria) execute um ping para os ips 192.168.14.242 e 192.168.14.1.

    Poste os resultados ai... Se até ai sair tudo ok, vamos fazer outros testes.
    Gostaria de te agradecer pela atenção

    Bem vamos lá
    depois de colocar o script para rodar aconteceu assim
    eu so pingo 192.168.15.1
    o 192.168.15.242, 192.168.14.1 e 192.168.14.242 não pingo

  6. #6

    Padrão outro script

    magnum olha só adapitei esse script e ta funcionando perfeitamente pena que ele não está dividindo e sim balanceando a rede ...

    fiz o teste de ping (para esse script) deu certo pinga para 192.168.15.1 192.168.14.1 192.168.15.242192.168.15.242
    usei o tracert e ele da mandando para o link 1 e 2
    sera que tem como mudar ele tipo quando ele faz o set narc 1 e 2 defginir que o 1 vai para os ips (192.168.0.10 192.168.0.11) e o 2 vai para (192.168.0.100 192.168.0.101)

    olha ele ai

    echo "Configurando Variáveis..."
    # Localização do comando iptables
    IPTABLES=/sbin/iptables
    # Localização do comando ip

    IP=/sbin/ip
    # Interface Externa 1 - velox
    NET_EXT_INT0=eth0
    # IP Virtua
    NET_EXT_IP0=192.168.14.242
    # Default Gateway Virtua
    NET_EXT_GW0=192.168.14.1


    # Interface interna
    NET_INT_INT1=eth2
    # IP interno
    NET_INT_IP1=192.168.0.1
    # Subnet interna
    NET_INT_SUB1=24
    # Rede interna
    NET_INT_NET1=192.168.0.0


    # Interface externa 2 - embratel
    NET_EXT_INT2=eth1
    # IP Speedy
    NET_EXT_IP2=192.168.15.242
    # Default Gateway Speedy
    NET_EXT_GW2=192.168.15.1

    echo "Limpando as tabelas..."
    $IPTABLES -F
    $IPTABLES -F -t nat
    $IPTABLES -F -t mangle
    $IPTABLES -X -t nat
    $IPTABLES -X -t mangle
    $IPTABLES -X

    echo "Regras Evandro ..."

    #REGRA DO SQUID
    $IPTABLES -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j REDIRECT --to-port 3128

    echo "Configurando tabela Mangle para eth0..."
    $IPTABLES -t mangle -N ETH0
    $IPTABLES -t mangle -F ETH0
    $IPTABLES -t mangle -A ETH0 -j MARK --set-mark 1
    $IPTABLES -t mangle -A PREROUTING -s 192.168.0.181/24 -j MARK --set-mark 1



    echo -n "Configurando tabela Mangle para ETH1..."
    $IPTABLES -t mangle -N ETH1
    $IPTABLES -t mangle -F ETH1
    $IPTABLES -t mangle -A ETH1 -j MARK --set-mark 2
    echo " [OK]"

    echo "Configurando tabela Nat para eth0..."
    $IPTABLES -t nat -N SPOOF_ETH0
    $IPTABLES -t nat -F SPOOF_ETH0
    $IPTABLES -t nat -A SPOOF_ETH0 -j SNAT --to ${NET_EXT_IP0}

    echo "Configurando tabela Nat para eth2..."
    $IPTABLES -t nat -N SPOOF_ETH2
    $IPTABLES -t nat -F SPOOF_ETH2
    $IPTABLES -t nat -A SPOOF_ETH2 -j SNAT --to ${NET_EXT_IP2}

    echo "Permitindo ping local..."
    $IPTABLES -A INPUT -p icmp -s ${NET_INT_NET1}/${NET_INT_SUB1} -d ${NET_INT_IP1} -j ACCEPT



    echo "Configurando regras de Mangle para eth0..."
    $IP ro add table 20 default via ${NET_EXT_GW2} dev ${NET_EXT_INT2}
    $IP ru add fwmark 2 table 20
    $IP ro fl ca

    echo "Configurando regras de spoofing..."
    $IPTABLES -t nat -A POSTROUTING -o ${NET_EXT_INT2} -j SPOOF_ETH2
    $IPTABLES -t nat -A POSTROUTING -o ${NET_EXT_INT0} -j SPOOF_ETH0

    echo "Adicionando rota default..."
    $IP ro add default equalize nexthop via ${NET_EXT_GW2} dev ${NET_EXT_INT2} weight 1 nexthop via ${NET_EXT_GW0} dev ${NET_EXT_INT0} weight 1




    echo "Desabilitando filtro de caminho reverso..."
    echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
    echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

    echo "Habilitando redirecionamento de pacotes..."
    echo 1 > /proc/sys/net/ipv4/ip_forward

  7. #7

    Padrão

    Cara, novamente, acho que não precisa de tudo isso...

    Faz o seguinte teste. Edita o arquivo /etc/iproute2/rt_tables e adicione 2 as seguines linhas:
    21 velox
    22 speedy

    Cria esse script:


    echo "Configurando Variáveis..."
    # Localização do comando iptables
    IPTABLES=/sbin/iptables
    # Localização do comando ip
    IP=/sbin/ip

    # Interface Externa 1 - velox
    NET_EXT_INT0=eth0
    # IP Virtua
    NET_EXT_IP0=192.168.14.242
    # Default Gateway Virtua
    NET_EXT_GW0=192.168.14.1


    # Interface interna
    NET_INT_INT1=eth2
    # IP interno
    NET_INT_IP1=192.168.0.1
    # Subnet interna
    NET_INT_SUB1=24
    # Rede interna
    NET_INT_NET1=192.168.0.0


    # Interface externa 2 - embratel
    NET_EXT_INT2=eth1
    # IP Speedy
    NET_EXT_IP2=192.168.15.242
    # Default Gateway Speedy
    NET_EXT_GW2=192.168.15.1

    echo "Limpando as tabelas..."
    $IPTABLES -F
    $IPTABLES -F -t nat
    $IPTABLES -F -t mangle
    $IPTABLES -X -t nat
    $IPTABLES -X -t mangle
    $IPTABLES -X


    #REGRA DO SQUID
    $IPTABLES -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j REDIRECT --to-port 3128

    echo "Criando chain NAT para eth0..."
    $IPTABLES -t nat -N NAT_ETH0
    $IPTABLES -t nat -F NAT_ETH0
    $IPTABLES -t nat -A NAT_ETH0 -j SNAT --to ${NET_EXT_IP0}

    echo "Configurando chain NAT para eth2..."
    $IPTABLES -t nat -N NAT_ETH2
    $IPTABLES -t nat -F NAT_ETH2
    $IPTABLES -t nat -A NAT_ETH2 -j SNAT --to ${NET_EXT_IP2}

    echo "Aplicando regras de NAT da eth1 e eth2..."
    $IPTABLES -t nat -A POSTROUTING -o ${NET_EXT_INT2} -j NAT_ETH2
    $IPTABLES -t nat -A POSTROUTING -o ${NET_EXT_INT0} -j NAT_ETH0


    echo "Permitindo ping local..."
    $IPTABLES -A INPUT -p icmp -s ${NET_INT_NET1}/${NET_INT_SUB1} -d ${NET_INT_IP1} -j ACCEPT

    echo "Adicionando marcação para IPs da diretoria"
    iptables -t mangle -A PREROUTING -s 192.168.0.10/32 -j MARK --set-mark 22
    iptables -t mangle -A PREROUTING -s 192.168.0.9/32 -j MARK --set-mark 22

    echo "Adicionando marcação para restante dos IPs"
    iptables -t mangle -A PREROUTING -j MARK --set-mark 21


    echo "Removendo possíveis rotas"
    $IP rule del lookup speedy
    $IP rule del lookup speedy
    $IP rule del lookup velox
    $IP rule del lookup velox
    $IP route del default
    $IP route del default

    echo "Adicionando default gateway para Velox"
    $IP route add default via ${NET_EXT_GW0} table velox

    echo "Adicionando default gateway para Speedy"
    $IP route add default via ${NET_EXT_GW2} table speedy

    echo "Vinculando tráfego marcado a tabela"
    $IP rule add fwmark 21 table 21 prio 20
    $IP rule add fwmark 22 table 22 prio 20


    echo "Desabilitando filtro de caminho reverso..."
    echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
    echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

    echo "Habilitando roteamento de pacotes..."
    echo 1 > /proc/sys/net/ipv4/ip_forward




    Depois de executar o script verifica as regras com esse comando:
    ip rule list

    e verifica as rotas de cada tabela com esse comando:
    ip route list table speedy
    ip route list table velox

    Qualquer coisa posta ai...
    Última edição por Magnun; 04-02-2009 às 08:35.