Encaminhando localhost e somente localhost através de outra rede no linux?

0

Descrição do problema:

Eu tenho uma questão bastante complicada, onde não consigo descobrir como lidar com isso de forma eficaz; Suponha que haja a seguinte configuração:

Existe 1 máquina linux, conectada a 3 conjuntos de redes, vamos chamá-los de A, B e C.

A máquina linux pode passar pela Internet através da rede A. Ela tem um endereço IP privado nessa rede, mas o NAT NÃO está ativado nela; por exemplo. quaisquer outras máquinas que sejam roteadas por meio dessa rede que tenham um ip público fornecido por ela podem se conectar à Internet por meio dela, mas o computador em questão não pode fazê-lo.

A Rede B é um conjunto de redes ip público ; um conjunto de várias redes públicas. Por padrão, os pacotes de B são roteados de volta para B, e para todos os outros destinos que não estão em B, são roteados via A.

A rede C é, como A, também uma rede onde a máquina tem um endereço privado . No entanto, aqui NAT é ativado. A rede C pode ser usada para se comunicar com a internet, mas os dispositivos na rede B não têm permissão para rotear através de C, eles precisam rotear através de A.

Atualmente, a máquina linux não pode falar com a internet. Eu quero que seja capaz de fazê-lo (por exemplo, ping www.stackoverflow.com para não retornar o tempo limite).

Como dizer ao linux para usar outro gateway para seu próprio tráfego, e somente seu próprio tráfego (fonte ou destino == localhost)?

Importante

Eu não quero rotear todo o tráfego para a internet em apenas uma rede. O tráfego que chega / vai à internet precisa usar duas redes, dependendo da fonte: tudo da máquina linux em uma rede (C), tudo que ela direciona (que não está em uma de suas intervalos locais), ele roteia sobre o outro (A).

Solução provisória

Primeiro, pensei em adicionar 'from / to localhost' à tabela ip rule , mas isso não é permitido. Qual é a maneira mais fácil de permitir que esse roteador use outro roteador na rede C como seu gateway, mas apenas do tráfego originado da própria máquina?

Essencialmente, o que eu quero é algo que seria equivalente ao exemplo abaixo, se isso realmente funcionasse da maneira ingênua e intuitiva:

0: from all lookup local
32000: from localhost lookup myroute
32100: from all lookup main 
32767: from all lookup default
    
por aphid 14.08.2017 / 10:35

1 resposta

0

Eu testei a seguinte configuração com dois namespaces de rede e dois pares de veth:

+-- Main --+
|          | 192.168.2.21/24
|    wlan0 | ------------------- ...
|          |
|          | 10.0.0.254/24   10.0.0.1/24 +-- NS0 --+
|   veth0a | --------------------------- | veth0b  |
|          |                             +---------+
|          |
|          | 10.0.1.254/24   10.0.1.1/24 +-- NS1 --+
|   veth1a | --------------------------- | veth1b  |
|          |                             +---------+
+----------+

O objetivo é rotear todo o tráfego de Main para wlan0 (rede C), enquanto direciona tudo de veth0 (rede A) a veth1 (rede B).

Há uma rota padrão normal em wlan0 , adquirida via DHCP:

$ ip route
default via 192.168.2.1 dev wlan0 
...

O encaminhamento está ativado:

echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward

Adicionamos uma rota padrão para veth1a em uma nova tabela, assumindo que 10.0.1.1 é o gateway:

sudo ip route add 10.0.1.0/24 table 250 dev veth1a src 10.0.1.254
sudo ip route add default table 250 dev veth1a via 10.0.1.1

Todo o tráfego de e para veth0a (10.0.0.0/24) usa esta tabela:

sudo ip rule add from 10.0.0.0/24 table 250
sudo ip rule add to 10.0.0.0/24 table 250

Se alguém atrás de veth1b (10.0.1.0/24) tiver a ideia estúpida de tentar nos usar como gateway, evite encaminhar para wlan0 e voltar direto usando a mesma tabela. Isso geralmente gera pacotes de erro ICMP:

sudo ip rule add from 10.0.1.0/24 table 250
sudo ip rule add to 10.0.1.0/24 table 250

Adapte-se à sua configuração conforme necessário.

Nenhum localhost foi sequer remotamente mencionado em qualquer lugar.

    
por 15.08.2017 / 08:45