Como posso configurar minha caixa linux como roteador para encaminhar pacotes ip?

25

Estou fazendo um experimento de rede sobre o encaminhamento de pacotes IP, mas não sei por que ele funciona.

Eu tenho uma máquina Linux com duas interfaces de rede, eth0 e eth1, ambos com endereço IP estático (eth0: 192.168.100.1, eth1: 192.168.101.2).

Meu objetivo é simples, eu só quero encaminhar pacotes IP de eth1 com destino na sub-rede 192.168.100.0/24 para eth0 e encaminhar pacotes IP de eth0 com destino na sub-rede 192.168.101.0/24 para eth1.

Ativei o encaminhamento de ip com:

sysctl -w net.ipv4.ip_forward=1

minha tabela de roteamento é assim:

# route -n
Kernel IP routing table
Destination     Gateway     Genmask        Flags Metric Ref   Use  Iface
192.168.100.0   0.0.0.0     255.255.255.0  U     0      0       0  eth0
192.168.101.0   0.0.0.0     255.255.255.0  U     0      0       0  eth1

Mas, quando tento executar o ping de 192.168.100.25 a 192.168.101.47, ele não funciona.

Yishu Fang
fonte

Respostas:

23

Você precisa adicionar uma regra de encaminhamento usando o iptablescomando, algo como isto:

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

consulte man iptablespara obter mais detalhes ou procure artigos de instruções na Internet, por exemplo, Como configurar um roteador NAT em um computador com Linux

Aqui está o HOWTO do Linux IP Masquerade, que discute o tópico em detalhes.

Você também deve garantir que não possui outras regras (por exemplo, na FORWARDcadeia) que estejam substituindo a ACCEPTregra acima . Se houver, você provavelmente deseja excluí-los.

Sergey
fonte
Não sei por que, mas ainda não funciona. Eu adicionei ambos iptables -A FORWARD -i eth0 -o eth1 -j ACCEPTe iptables -A FORWARD -i eth1 -o eth0 -j ACCEPTàs minhas tabelas. E minhas políticas INPUT, OUTPUT e FORWARD são todas ACCEPT.
Yishu Fang
Há muitas coisas que podem ser configuradas incorretamente. Por exemplo, o IP do host deve ser especificado como "IP do gateway" nos hosts da rede "interna", para que eles saibam que, se um IP não estiver no intervalo da rede "local", os pacotes precisam ser enviados para o seu máquina de gateway. Isso é semelhante à configuração usual em que o roteador ADSL é registrado como gateway para hosts na LAN
Sergey
Quando uso tracerouteno meu host, ele mostra que o pacote vai para o "roteador" (192.168.100.1), mas não avança.
Yishu Fang
1
@UniMouS: Parece que eu esqueci a coisa do MASQUERADE - editei minha resposta e adicionei novos links aos artigos.
Sergey
2

Você precisa adicionar uma rota a 192.168.100.25 e 192.168.101.47.

Se o servidor de encaminhamento tiver IPs 192.168.100.1 e 192.168.101.1, você adicionaria o cliente 192.168.100.25

ip route 192.168.101.0/24 via 192.1268.100.1

e no cliente 192.168.101.47

ip route 192.168.100.0/24 via 192.168.101.1

(Isso funciona apenas com o encaminhamento ativado, sem iptables).

V. Campos
fonte