Roteando pacotes de uma interface para outra

1

Resumo do problema

Aqui está uma tabela de roteamento em um computador Linux:

root@computer:~# ip route show
default via 192.168.1.1 dev eth0 
10.0.0.200 dev tun0  proto kernel  scope link  src 10.0.0.100

Os pacotes com um IP de destino de 1.2.3.5 enviados para tun0 neste computador não estão sendo enviados da eth0.

Descrição longa do que estou tentando construir

O objetivo deste projeto é dar um dos meus computadores (e mais deles em um momento posterior) um endereço IP público. Existem dois requisitos:

  • Este computador está por trás de um NAT que eu não controle.
  • Não quero que outros computadores da minha LAN precisem passar pela Internet (relativamente) lenta para acessá-la.

Arquitetura

Esta é a arquitetura com a qual estou trabalhando:

Computador:

  • A: um computador aleatório na internet que deseja se conectar ao computador F.
  • B: tem um IP extra (1.2.3.5) Eu quero rotear para F até E.
  • C: fora do meu controle.
  • D: meu roteador, ele tem uma rota estática: 1.2.3.5 --- > 192.168.1.3
  • E: estabelece um SSH TUN com B, encaminha pacotes de entrada destinados a 1.2.3.5 para seu gateway padrão D.
  • F: um servidor que eu quero que todos os outros computadores (ambos em minha LAN na internet) acessem por 1.2.4.5

Configuração

O encaminhamento de IP foi configurado em B, E, F com:

echo 1 > /proc/sys/net/ipv4/ip_forward

/etc/sysctl.conf foi modificado em E:

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

SSH TUN estabelecido em E com:

ssh -w 0:0 1.2.3.4

interface tun0 criada em E com:

ip link set tun0 up
ip addr add 10.0.0.100/32 peer 10.0.0.200 dev tun0

interface tun0 criada em B com:

ip link set tun0 up
ip addr add 10.0.0.200/32 peer 10.0.0.100 dev tun0

Agora posso efetuar o ping E de B com êxito:

ping 10.0.0.100

IP 1.2.3.5 removido da interface em B com:     ifconfig venet0: 1 0.0.0.0

rota adicionada a B com:     ip route add 1.2.3.5/32 via 10.0.0.100 dev tun0

IP adicionado à interface em F com:     ip addr add 1.2.3.5 dev eth0

Testes

O seguinte comando foi executado em A para testar o envio de pacotes:

netcat -u 1.2.3.5 4444

Os seguintes comandos foram executados em E para ver se os pacotes estavam sendo recebidos:

root@computer:~$ tcpdump -n -i tun0 port 4444
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
13:48:21.034003 IP 4.3.2.1.44312 > 1.2.3.5.4444: UDP, length 5


root@computer:~$ tcpdump -n -i eth0 port 4444
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:48:21.034061 IP 4.3.2.1.44312 > 1.2.3.5.4444: UDP, length 5

O seguinte comando foi executado em E:

root@computer:~# netcat -u 1.2.3.5 4444
test

Com o seguinte comando executado simultaneamente em F:

root@computer:~# nc -ul 4444
test

Problema

O problema que estou enfrentando é que um dos computadores (E) está recebendo pacotes IP para um determinado IP (1.2.3.5), mas não os encaminhando para seu gateway padrão.

Eu acredito que o que eu estou perdendo é um comando em E que irá encaminhar pacotes de entrada na interface tun0 para seu gateway padrão na interface eth0.

Alguém sabe qual comando posso estar faltando?

    
por robfors 15.10.2016 / 22:40

1 resposta

0

O problema de roteamento foi resolvido pelo conselho da Celada para desabilitar Reverse Path Filtering modificando o arquivo /etc/sysctl.conf

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

Embora eu agora perceba que para competir com essa configuração eu também precisarei rotear os pacotes retornando através de E e B para evitar a filtragem de caminho reverso upstream pelo meu ISP.

    
por 27.10.2016 / 05:11