Roteamento com base no protocolo ou porta
Tenho um servidor Linux com três placas de rede: Uma para a rede local (eth0) e as outras duas cada uma para um provedor diferente.
Neste servidor roda o Squid (proxy) e o QMail (servidor de correio).
Estou querendo separar o tráfego. Todo o tráfego do Squid quero vá pelo Provedor1 e todo o tráfego do QMail quero vá pelo Provedor2.
Alguém conhece uma solução para fazer isso ?
Já tentei a solução abaixo (iproute e iptables) mas não obtive êxito.
# Create two tables (21 and 31) to use with each connection
# Copy main route to table 31
ip route show table main | grep -Ev ^default | \
while read ROUTE ; do \
ip route add table 31 $ROUTE; \
done
# use ISP-1 as default gateway for table 31
ip route replace default via x.x.x.2 table 31
# Copy main route to table 21
ip route show table main | grep -Ev ^default | \
while read ROUTE ; do \
ip route add table 21 $ROUTE; \
done
# use ISP-2 as default gateway for table 21
ip route replace default via y.y.y.2 table 21
# Mark packages (1 or ISP-1 e 2 for ISP-2)
# aqui, já troquei OUTPUT por POSTROUTING e PREROUTING sem sucesso
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 2
# Define rules to use the correct connection
ip rule add from x.x.x.1 table 31
ip rule add fwmark 1 table 31
ip rule add from y.y.y.1 table 21
ip rule add fwmark 2 table 21
Roteamento com base no protocolo ou porta
Baeado na suposição de que vc tem duas placas com ip fixo, ou cada uma delas apontando para um modem/roteador conectado a 2 linhas diferentes:
Sugestão:
Separe as máquinas. Crie uma entrada MX no teu dns apontando para a máquina na qual está o SMTP e aponte no MUA dos clientes a interface interna dessa máquina. E é mais seguro, os dois serviços vão ficar mais livres, etc.
Se voce definir o gateway da rede como sendo a máquina do proxy e essa máquina e o smtp puderem se enxergar (via cabo cross?) basta informar ao proxy que o smtp é a outra máquina, e ele vai rotear o pacote pelo tipo de serviço (smtp/25 e 110+145/pop+imap).
:idea:
Sds,
Roteamento com base no protocolo ou porta
Ao karfax:
Obrigado pela sugestão de separar as máquinas. Irei usar uma alternativa como essa se não encontrar a solução usando uma única máquina.
Ao TheMage
Pelo que entendi das suas regras, esta máquina funciona apenas como gateway e ela "filtra" os pacotes que estão passando de acordo com o protocolo/porta.
No meu caso, o tráfego que desejo separar, parte diretamente de aplicações instaladas neste linux, no caso o SQUID e o QMAIL. Este tráfego não passa pela chain PREROUTING da table mangle do iptables. Se eu estiver errado, alguém me corrija por favor.
Grato.
Roteamento com base no protocolo ou porta
Ops,.. desculpe,.. acho que esqueci desdas duas,.. pois tenho uma parte que é parecida,.. !
acho que com mais isso,.. vc faz o que vc precisa,.. !
## isso tmb é no firewall !
iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK -o ! eth1 --set-mark 1
iptables -A PREROUTING -t mangle -p tcp -s 192.168.22.0/24 -i eth2 --dport 80 -j MARK --set-mark 1
Roteamento com base no protocolo ou porta
Use o iptables ROUTE path-o-magic, apesar de estar em estado experimental, não tivemos nenhum problema em mais de dois meses de uso.
Roteamento com base no protocolo ou porta
Citação:
Postado originalmente por Anonymous
Use o iptables ROUTE path-o-magic, apesar de estar em estado experimental, não tivemos nenhum problema em mais de dois meses de uso.
Estou tentando usar o iptables ROUTE, mas ainda não obtive sucesso. Inclui a seguinte linha no meu script para que o tráfego de web saia pela interface ppp0 (velox):
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j ROUTE --oif ppp0
Também acrescentei no final da linha o parâmetro --continue e não obtive êxito.
Vale acrescentar que o tráfego está chegando pela eth0 e o gateway padrão é pela eth2.
Grato por qualquer ajuda ou dica.
Roteamento com base no protocolo ou porta
A título de informação:
Consegui fazer funcionar com o iptables (MARK) e iproute. A solução (smplificada) ficou assim:
iptables -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 3
ip rule add pref 31 fwmark 3 table 31
ip rule add pref 31 from <ip do ppp0> table 31
ip route add default dev ppp0 table 31
echo 0 > /proc/sys/net/ipv4/conf/ppp0/rp_filter
O default gateway está na eth1.
Obrigado a todos que colaboraram.