
Preciso configurar uma rede habilitada para DHCP (192.168.2.) em uma camada física onde reside uma rede já existente (192.168.1.) com IPs estáticos. Eu tenho um servidor Debian 7 com duas interfaces (servidor e interfaces são todos virtuais) e quero configurar o ip como gateway para minha rede. Usei eth0 para rotear pacotes para a rede original (para acessar o gateway da Internet em 192.168.1.5) e eth1 para lidar com o tráfego de/para minha rede.
ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:d4:02:1b
inet addr:192.168.1.110 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed4:21b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21668983 errors:0 dropped:0 overruns:0 frame:0
TX packets:10044848 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10931368249 (10.1 GiB) TX bytes:2383839079 (2.2 GiB)
eth1 Link encap:Ethernet HWaddr 00:0c:29:d4:02:25
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed4:225/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14113604 errors:0 dropped:0 overruns:0 frame:0
TX packets:11269734 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1871598524 (1.7 GiB) TX bytes:10331981618 (9.6 GiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8158 errors:0 dropped:0 overruns:0 frame:0
TX packets:8158 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:629690 (614.9 KiB) TX bytes:629690 (614.9 KiB)
rota
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.5 0.0.0.0 UG 0 0 0 eth0
localnet * 255.255.255.0 U 0 0 0 eth0
192.168.2.0 * 255.255.255.0 U 0 0 0 eth1
iptables-vL
Chain INPUT (policy ACCEPT 5603K packets, 822M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy DROP 138K packets, 8597K bytes)
pkts bytes target prot opt in out source destination
14M 9542M ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
398K 27M ACCEPT all -- eth1 any anywhere anywhere
Chain OUTPUT (policy ACCEPT 2915K packets, 1432M bytes)
pkts bytes target prot opt in out source destination
iptables -tnat -vL
Chain PREROUTING (policy ACCEPT 607K packets, 49M bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 112K packets, 17M bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6893 packets, 977K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 2391 packets, 374K bytes)
pkts bytes target prot opt in out source destination
363K 24M MASQUERADE all -- any eth0 anywhere anywhere
Depois disso, habilitei um servidor DHCP autoritativo na eth1.
Agora o problema: as conexões com o servidor estão sempre funcionando (eu tenho um compartilhamento samba e um servidor MySQL lá), mas às vezes (parece aleatoriamente) os clientes (principalmente Windows 7 ou XP) não conseguem se conectar à internet por um período variável de tempo . Quando estou nesta condição, consigo fazer ping para 192.168.1.110, mas não para 192.168.1.5.
Termo aditivo
O fato de a cadeia FORWARD ter descartado pacotes parece suspeito, então desativei temporariamente essa filtragem com:
iptables -A FORWARD -j ACCEPT
Com esta nova regra em vigor, tudo funciona. Ainda preciso esclarecer o que está acontecendo...
Adendo 2
Estas são as regras reais do iptables:
iptables-save
# Generated by iptables-save v1.4.14 on Fri Jun 27 20:53:32 2014
*mangle
:PREROUTING ACCEPT [28129147:14012989399]
:INPUT ACCEPT [8479051:1218948772]
:FORWARD ACCEPT [19639349:12792010625]
:OUTPUT ACCEPT [4434912:3183821941]
:POSTROUTING ACCEPT [23940877:15968783924]
COMMIT
# Completed on Fri Jun 27 20:53:32 2014
# Generated by iptables-save v1.4.14 on Fri Jun 27 20:53:32 2014
*nat
:PREROUTING ACCEPT [931027:74896097]
:INPUT ACCEPT [153578:23398245]
:OUTPUT ACCEPT [9169:1292388]
:POSTROUTING ACCEPT [3186:492868]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Fri Jun 27 20:53:32 2014
# Generated by iptables-save v1.4.14 on Fri Jun 27 20:53:32 2014
*filter
:INPUT ACCEPT [2415796:331288771]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1218435:1654003511]
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -j ACCEPT
COMMIT
# Completed on Fri Jun 27 20:53:32 2014
Responder1
Para ajudá-lo a diagnosticar onde os pacotes estão fluindo através das cadeias iptables você pode usar o parâmetro -j LOG e eventualmente o --log-prefix "algum texto para identificar facilmente o log em kern.log ou syslog " Você pode deixar a política padrão Accept e adicione uma regra negar tudo no final da cadeia FORWARD com o registro habilitado para que você possa entender melhor que tipo de pacotes estão sendo descartados.
Você pode dar uma olhada neste esquemahttp://www.linuxnetmag.com/share/issue9/iptables3.jpg, que mostra o fluxo básico de pacotes dentro das cadeias iptables.
Seria interessante ter as regras completas do iptable que você definiu para dar uma resposta melhor.