Roteamento baseado em porta no Ubuntu

1

Minha situação: Um servidor Ubuntu faz parte de uma LAN com 2 gateways. Aquele oferece alta velocidade com alta latência. A outra velocidade baixa com baixa latência. Meu servidor geralmente usa o GW1 para todo o tráfego (devido à alta largura de banda). Eu adoraria ser capaz de ssh no servidor através da conexão de baixa latência. O GW2 tem um encaminhamento de porta para o servidor, mas obviamente não funciona fora da caixa, porque o servidor responderá via GW1, o que eliminará os pacotes.

Após algumas pesquisas, ehre é o que eu fiz (minha porta ssh é 222):

eu adicionei uma regra iptables para marcar os pacotes

iptables -L PREROUTING -t mangle
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
MARK       tcp  --  anywhere             anywhere             tcp dpt:222 MARK set 0x1

eu adicionei o seguinte ao / etc / iproute2 / rt_tables

100    sshtable

eu adicionei uma regra ip para a nova tabela - isso é "saída da regra ip show"

ip rule show
0:      from all lookup local
32764:  from all fwmark 0x1 lookup sshtable
32766:  from all lookup main
32767:  from all lookup default

eu mudei o roteamento para a nova tabela - isso é "ip route show table sshtable"

ip route show table sshtable
default via 192.168.2.2 dev eth0

rp_filter deve ser desativado:

cat /etc/sysctl.conf | grep filter
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

Infelizmente, isso não funciona. Eu posso ver a conexão de entrada sendo preso em SYN_SENT (usando tcptrack).

Você tem alguma dica para mim? Nik

    
por Niksac 15.04.2014 / 12:39

1 resposta

0

Você deve marcar toda a conexão, senão apenas o primeiro pacote.

iptables -t mangle -A PREROUTING -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN
iptables -t mangle -A PREROUTING -p tcp -dport 222 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark

Você pode ter que carregar o módulo ipt_connmark . Para descobrir se ele é fornecido com seu kernel, execute o seguinte:

$ find /lib/modules/'uname -r' -name 'xt_connmark.ko'
$ lsmod | grep 'connmark'

Em seguida, certifique-se de carregar o módulo, se ainda não estiver carregado.

# modprobe ipt_connmark
    
por 15.04.2014 / 13:39