Configurando o roteamento público x privado no Ubuntu

1

Eu tenho procurado por um tempo e não consigo encontrar uma boa resposta para isso, então pensei em perguntar antes de passar outro par de dias batendo com a cabeça na minha mesa.

Eu tenho uma caixa do Ubuntu com duas interfaces físicas e uma interface virtual.

  eno1 - 172.16.0.100
  eno2 - 172.16.0.101
eno1:0 - x.x.x.x

O que eu gostaria de ter

  1. Para respostas a pacotes recebidos, eu gostaria que os pacotes saíssem na interface em que seu pedido chegava.
  2. Para pacotes de saída, eu gostaria que eles saíssem por padrão em ...

    a. eno1 - para pacotes destinados a redes privadas (vários intervalos não contíguos 172.16.x.0) b. eno1: 0 - para pacotes destinados a todas as outras redes

Configuração atual

lista de regras de ip

0:  from all lookup local 
32760:  from all to x.x.x.x lookup eno1:0 
32761:  from x.x.x.x lookup eno1:0 
32762:  from all to 172.16.0.101 lookup eno2 
32763:  from 172.16.0.101 lookup eno2 
32764:  from all to 172.16.0.100 lookup eno1 
32765:  from 172.16.0.100 lookup eno1 
32766:  from all lookup main 
32767:  from all lookup default

tabela da lista de rota ip eno1: 0

default via x.x.x.1 dev eno1 

tabela da lista de rota ip eno1

default via 172.16.0.1 dev eno1 
172.16.0.0/24 dev eno1  scope link  src 172.16.0.100 

tabela da lista de rota ip eno2

default via 172.16.0.1 dev eno2 
172.16.0.0/24 dev eno2  scope link  src 172.16.0.101

lista de rotas de ip

default via 172.16.0.1 dev eno1 onlink 
x.x.x.0/23 dev eno1  proto kernel  scope link  src x.x.x.x 
172.16.0.0/24 dev eno2  proto kernel  scope link  src 172.16.0.101 
172.16.0.0/24 dev eno1  proto kernel  scope link  src 172.16.0.100

valores de sysctl para eno1 e eno2

arp_filter=1
arp_ignore=1
arp_announce=2

Problemas

  1. Eu posso alcançar esporadicamente eno1 e eno2 a partir de intervalos fora de seus sub-redes, mas não consigo acessar eno1: 0.
  2. Na caixa, não consigo acessar a internet (IPs públicos).
por UAdmin 06.04.2017 / 16:53

1 resposta

0

Descoberto - ou melhor, redescoberto - a resposta ...

O problema é que o Unix acredita que o host é a entidade de rede, e não a porta, que causa todos os tipos de problemas de arp em servidores multi-homed. Então, basicamente, eu precisava limitar as respostas arp em uma interface para os endereços IP associados a essa interface, caso contrário, o Unix responderia em QUALQUER interface, independentemente do IP - o que realmente confunde os outros dispositivos da sub-rede.

Então ... Arptables instalados

sudo apt-get -y install arptables

Limitou as respostas em cada interface para os IPs na interface

sudo arptables -n -v --line-numbers -L
Chain INPUT (policy DROP 6011K packets, 168M bytes)
1 -j ACCEPT -i eno1 -o * -d x.x.x.x , pcnt=2496 -- bcnt=69888 
2 -j ACCEPT -i eno1 -o * -d 172.16.0.100 , pcnt=294 -- bcnt=8232 
3 -j ACCEPT -i eno2 -o * -d 172.16.0.101 , pcnt=294 -- bcnt=8232 

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
1 -j ACCEPT -i * -o eno1 -s x.x.x.x , pcnt=2503 -- bcnt=70084 
2 -j ACCEPT -i * -o eno1 -s 172.16.0.100 , pcnt=295 -- bcnt=8260 
3 -j ACCEPT -i * -o eno2 -s 172.16.0.101 , pcnt=294 -- bcnt=8232 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

E voila, todos os IPs estão respondendo em suas portas corretas.

Homem! Espero não me esquecer disso novamente!

    
por 10.04.2017 / 16:32

Tags