Rotas padrão mutiple

1

Eu conectei dois servidores via vpn. O servidor A hospeda todo o contêiner e o servidor B é apenas um roteador simples. Eu preciso anexar ao servidor via ssh, como tal, a rota padrão de ppp0 (servidor A) e eth0 (servidor B) não deve ser alterada, exceto os pacotes que saem do container hospedado pelo servidor A. Esse container deve enviar todo o tráfego para o servidor B.

Server A                                                                                              Server B
-------------------------------------------------------------------------------------------                 ---------------------------------------------
internet ---- ppp0 (a.b.c.d/32)                                                             eth0 (e.f.g.h/32) ---- internet
                   vpn   (172.16.0.1/16)    -----------------------------------------------    vpn (172.16.0.2/16)
            +---- vswitch (172.17.0.1/16)
            |
            |                                             Container yp
            +---- yp (slave of vswitch)  ----  eth0 (172.17.0.3/16)
            |
            |                                                 Container boot
            +---- boot (slave of vswitch)  ----  eth0 (172.17.0.4/16)

O ppp0 não é uma conexão VPN, mas o link ADSL local. O MTU de ppp0 é 1480.

Ambos os links vpn são construídos em cima do Wireshark. O MTU de ambos é 1420.

Eu tentei marcar o tráfego do container do servidor A e direcionar esse tráfego para o servidor B / internet. Além disso, tentei torná-lo bidirecional, pois o futuro contêiner no servidor B será exibido.

# iptables -t mangle -A PREROUTING -j MARK --set-mark 85 -i vswitch
# iptables -t mangle -A PREROUTING -j MARK --set-mark 95 -i vpn

# ip rule add fwmark 85 lookup 185
# ip rule add fwmark 95 lookup 195

# ip route add table 185 default via 172.16.0.1 dev vpn
# ip route add table 185 default via 172.16.0.1 dev vswitch

Quando logado no container yp eu tentei fazer ping no servidor B.

[root@yp ~]# ping 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
^C
--- 172.16.0.2 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1004ms

Aqui está a tabela de roteamento do servidor A

# ip r show table all
default via 172.16.0.1 dev vpn table 185 
default via 172.17.0.1 dev vswitch table 195 
default dev ppp0 scope link 
a.b.c.n dev ppp0 proto kernel scope link src a.b.c.d
local a.b.c.d dev ppp0 table local proto kernel scope host src a.b.c.d 
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1 
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1 
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1 
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1 
broadcast 172.16.0.0 dev vpn table local proto kernel scope link src 172.16.0.1 
local 172.16.0.1 dev vpn table local proto kernel scope host src 172.16.0.1 
broadcast 172.16.255.255 dev vpn table local proto kernel scope link src 172.16.0.1 
broadcast 172.17.0.0 dev vswitch table local proto kernel scope link src 172.17.0.1 
local 172.17.0.1 dev vswitch table local proto kernel scope host src 172.17.0.1 
broadcast 172.17.255.255 dev vswitch table local proto kernel scope link src 172.17.0.1 

O que estou perdendo para obter o roteamento / marcação correta?

    
por user1587451 05.05.2018 / 15:33

1 resposta

0

Não tenho certeza se entendi o diagrama corretamente: Tudo o que você deseja fazer é definir uma rota no servidor A para que os pacotes provenientes de qualquer um dos dois contêineres sejam roteados para o servidor B, correto?

De qualquer forma, em geral, não use iptables para rotear. (Isso é uma implicância minha, por algum motivo, as pessoas tentam usar iptables para rotear o tempo todo.) Existem alternativas, por exemplo. roteamento de políticas.

Então, no seu caso, algo como

ip route add table 250 172.16.0.1/16 dev vpn scope link
ip route add table 250 default via 172.16.0.2
ip rule add from 172.16.0.3 table 250
ip rule add from 172.16.0.4 table 250

(não testado) deve fazer o truque. Há muitos tutoriais on-line sobre roteamento de políticas.

    
por 05.05.2018 / 17:32