Roteamento de pacotes da interface Linux tun [fechado]

1

Eu tenho perguntas sobre o fluxo de pacotes ip para o seguinte cenário.

O cenário é:

  1. Uma interface tun0 (10.0.0.2/8) e um cartão de lan sem fio físico wlan0 (endereço IP não corrigido) no lado do cliente, o wlan0 pode se conectar à internet,
  2. Outra interface tun0 (10.0.0.1/8) e uma placa ethernet física eth0 (192.168.1.38/24) no lado do servidor (Ubuntu 12.04 amd64), eth0 está em uma rede privada atrás de um firewall NAT e pode se conectar a a internet através do firewall (firewall como gateway),
  3. executaram " echo 1 > /proc/sys/net/ipv4/ip_forward " no lado do servidor
  4. executaram " iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE " no lado do servidor

Here is the diagram of the scenario :

---------------          ----------------
|             |          |              |
| client tun0 |----------| client wlan0 |
|  10.0.0.2   |          |  ip not fix  |
|             |          |              |
---------------          ----------------
                                |
                                |

                             internet

                                |
                                |
                         ----------------
                         |              |
                         |   firewall   |
                         |   (gateway)  |
                         | 192.168.1.1  |
                         |              |
                         ----------------
                                |
                                | private network
                                | 192.168.1.0/24
                                |
---------------          ----------------
|             |          |              |
| server tun0 |----------| server eth0  |
|  10.0.0.2   |          | 192.168.1.38 |
|             |          |              |
---------------          ----------------

Eu usei dois programas cliente / servidor tipo vpn muito simples para ler / gravar pacotes ip das duas interfaces tun0 e criar um túnel entre wlan0 e eth0, para que os pacotes ip de 10.0.0.2 pudessem alcançar 10.0.0.1 e vice-versa (por exemplo, pode executar o ftp de 10.0.0.1 a 10.0.0.2).

No entanto, se eu quiser usar o cliente tun0 (10.0.0.2) para navegar em páginas da Web, a solicitação http será originada de 10.0.0.2 e destinada em um endereço IP da Internet (com certeza não 10.0.0.1). O pedido de http, (eu acho) depois de atingir o servidor tun0 (10.0.0.1), seria então encaminhado para o servidor eth0 (como ip_forward está ligado, e eu acho que este pedido encaminhado http ainda teria um endereço IP de origem de 10.0.0.2, corrija-me se eu estiver errado) e lá NAT ocorre para reempacotar o pedido http como proveniente de eth0 (ie endereço IP de origem muda para 192.168.1.38 como eu executei o comando iptables) e então o pedido http reempacotado passa pelo firewall (e depois a internet) ao seu destino.

Quando a resposta http (do site) atinge o servidor eth0, o NAT reverso deve ocorrer lá. Minha pergunta é:

  1. o NAT inverso reverte o endereço IP de destino da resposta http para 10.0.0.2,
  2. como o servidor eth0 sabe para onde encaminhar a resposta http com NAT reverso?
  3. encaminharia eth0 a resposta http para o servidor tun0 (10.0.0.1), pois o endereço IP de destino da resposta é invertido para ser 10.0.0.2?
  4. preciso adicionar uma rota no lado do servidor para o roteamento / encaminhamento adequado da resposta http com NAT reverso? se sim, como?
  5. eu preciso adicionar algumas regras de iptables no lado do servidor para o roteamento / encaminhamento apropriado da resposta http com NAT reverso? se sim, como?
por user1129812 06.01.2015 / 12:08

1 resposta

3

Supondo que o seu cliente envia todo o tráfego através do tun0, você precisa adicionar o seguinte no lado do servidor (depois de ativar / proc / sys / net / ipv4 / ip_forward):

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

Após esta etapa, quando você navegar nas páginas da Web a partir do seu cliente, o fluxo de pacotes a seguir será:

  1. O cliente enviará o pacote para 10.0.0.1.
  2. No lado do servidor, o pacote recebido no tun0 será traduzido de 10.0.0.2 para 192.168.1.38.
  3. Uma entrada de mapeamento será criada na tabela NAT.
  4. O pacote será enviado para a internet via 192.168.1.1 (gateway).
  5. A resposta será recebida em 192.168.1.38.
  6. O NAT reverso ocorrerá de acordo com a entrada de mapeamento criada na etapa 3.
  7. O pacote de resposta será roteado de volta para 10.0.0.2.

Espero não perder um passo importante:)

    
por 06.01.2015 / 14:21