Como posso usar o Linux como um gateway?

12

NOTE: If client devices (computer B in this example) want to obtain internet through the gateway computer, maybe they still need to configure nameserver resolution. This is not explained here (a gateway does not necessarily serve internet).

Estou tentando entender os fundamentos do roteamento de redes.
Então eu estou experimentando com a minha LAN (eu não preciso de internet por enquanto, apenas comunicações LAN).

Eu sei que os problemas de configuração de rede são um tanto complexos, mas estou apenas tentando fazer um computador (digamos A) para atuar como um gateway para outro (digamos B) (ambos executando o Ubuntu Linux).
Eu só preciso de B para ser capaz de alcançar o roteador, que só é alcançável por A.

Este é o caso:

Router for computer A  -->  192.168.0.1
Computer A - eth0      -->  192.168.0.2
Computer A - eth1      -->  192.168.1.1

Computer B - eth0      -->  192.168.1.2

Computador A conecta bem ao roteador .
Computador A e B se conectam bem (ping, SSH ... etc) entre eles .
O computador B pode não alcançar o roteador para o computador A.

Eu estava pensando que apenas adicionando o B A como gateway padrão e ativando o IP Forwarding em A faria com que o B conseguisse acessar o roteador para A:

luis@ComputerB:~$ sudo route add default gw 192.168.1.1
luis@ComputerB:~$ sudo routel

target            gateway      source        proto    scope  dev   tbl
127.0.0.0         broadcast    127.0.0.1     kernel   link   lo    local
127.0.0.0 8       local        127.0.0.1     kernel   host   lo    local
127.0.0.1         local        127.0.0.1     kernel   host   lo    local
127.255.255.255   broadcast    127.0.0.1     kernel   link   lo    local
192.168.1.0       broadcast    192.168.1.2   kernel   link   eth0  local
192.168.1.2       local        192.168.1.2   kernel   host   eth0  local
192.168.1.255     broadcast    192.168.1.2   kernel   link   eth0  local
default           192.168.1.1                                eth0
169.254.0.0 16                                        link   eth0
192.168.1.0 24                 192.168.1.2   kernel   link   eth0

E no computador A (o gateway intermediário):

root@ComputerA:~$ echo 1 > /proc/sys/net/ipv4/ip_forward

O computador B ainda pode fazer ping no computador A, mas o roteador para A não responde:

luis@ComputerB:~$ ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
^C

(sem resposta de ping)

Este é o procedimento correto para fazer com que um computador executando o Linux atue como um gateway para outro computador de maneira simples?

    
por Sopalajo de Arrierez 09.08.2015 / 03:34

2 respostas

15

Você está quase lá, só precisa ter certeza de que o tráfego voltará para B. Agora, você redirecionou o tráfego de B para o mundo exterior, mas A não sabe como obter tráfego para B. Você precisa de A para manter algum estado sobre as conexões que passam por ele. Para fazer isso, você desejará ativar NAT . Você já tem o primeiro passo, que é permitir o encaminhamento. Então você precisa adicionar algumas regras de firewall usando iptables :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Isso diz: na tabela de conversão de endereços de rede, depois de descobrirmos o roteamento de um pacote na saída eth0 (o externo), substitua as informações de endereço de retorno com as nossas próprias para que os pacotes de retorno cheguem até nós. Além disso, lembre-se de que fizemos isso (como uma tabela de pesquisa que lembra essa conexão).

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Permite que os pacotes que venham da eth1 (a interface interna) saiam da eth0 (a interface externa).

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

Use essa tabela de consulta que tínhamos de antes para ver se o pacote que chega na interface externa realmente pertence a uma conexão que já foi iniciada a partir do interno.

    
por 09.08.2015 / 06:15
1

Para que o roteamento funcione corretamente entre dois computadores Linux que atuam como gateways, há várias coisas que precisam ser implementadas:

  • Os dois gateways precisam ter um link físico entre si (ou virtual, se você estiver vinculando máquinas virtuais).
  • As rotas devem ser adicionadas a ambas as interfaces no roteador.

    route add -net 192.168.0.0/24 gw 192.168.0.1
    route add -net 192.168.1.0/24 gw 192.168.1.1
    
  • Um gateway local deve ser especificado para a rede remota em ambos os gateways. Isso permite que os computadores na rede local saibam para onde enviar pacotes para a rede remota. O gateway deve ser o endereço IP do computador que enviará pacotes para a rede remota.

  • Os computadores que desejam enviar tráfego entre as redes também devem estar cientes de qual gateway local está processando tráfego para e da rede remota. Isso geralmente é feito por meio do Protocolo de Controle Dinâmico de Hosts (DHCP); no entanto, se você pretende usar um gateway separado para a Internet, precisará especificar os computadores que precisam de acesso à Internet e à outra rede (por exemplo, o gateway da Internet). DHCP e o gateway da outra rede através de uma rota).
  • O
  • encaminhamento de IP deve estar ativo para os dois gateways.
  • O IP Masquerading deve ser ativado para permitir que o NAT funcione entre os gateways.

    modprobe iptable_nat
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -A FORWARD -i eth1 -j ACCEPT
    

    Pode ser necessário especificar uma origem e um destino, pois você está usando a mesma interface para o mascaramento:

    iptables -t nat -A POSTROUTING -i eth0 -s 192.168.0.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
    

    e o outro gateway:

    iptables -t nat -A POSTROUTING -i eth1 -s 192.168.1.0/24 ! -d 192.168.0.0/24 -j MASQUERADE   
    

    Para cada gateway, o tráfego da rede local deve ser aceito na interface apropriada como esta:

    iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -j ACCEPT
    

    ou

    iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -j ACCEPT
    

Existem numerosos links e semelhante perguntas podem ser referenciadas para resolver os problemas que você está tendo.

O que parece estar errado neste caso em particular é que a configuração de rota e gateway não está completa em ambos os computadores e a Conversão de Endereço de Rede (NAT) não foi ativada usando iptables, permitindo que os gateways carreguem a solicitação de um computador. a outra sub-rede em seu nome.

Isso também é crítico ao configurar uma conexão com a Internet, pois você é responsável por uma extremidade da conexão (por exemplo, usando um computador Linux como gateway para uma conexão PPPoE).

    
por 09.08.2015 / 06:26