Encaminhamento de porta com iptables e dhcpd

1

A configuração: Eu tenho uma caixa Linux (Gentoo, se isso faz diferença) que serve como um gateway para todo o apartamento. Essa caixa faz sua mágica NAT com iptables e dhcpd.

O problema: Eu tenho um certo computador que eu quero ter uma porta encaminhada para (para torrents, se, novamente, há uma diferença).

Eu tenho habilidades de administração do Linux suficientes para ler o howtos e configurar adequadamente as coisas (eventualmente), mas os howtos que encontrei para o meu caso não eram claros e pareciam ser desnecessariamente complexos.

Para o que eu recolhi, meu problema é duplo: fazer com que o dhcpd atribua de forma confiável um certo IP estático ao computador que eu quero, e então obter o iptables configurado para o encaminhamento de porta.

Alguém poderia me dar um guia passo-a-passo sobre como fazer isso? Tenho certeza que não sou o único que quer fazer isso ...

Editar: Minhas versões do software são:

# iptables --version
iptables v1.4.0

# dhcpd --version
isc-dhcpd-V3.1.1-Gentoo
    
por Henrik Paul 03.05.2009 / 20:10

2 respostas

6

Para fazer com que o dhcp atribua de forma confiável um determinado IP estático ao computador que você deseja, o mais comum é verificar como informar ao seu servidor dhcp (o que estiver sendo executado) para mapear estaticamente um endereço mac para um Endereço de IP. Isso fará com que sempre entregue o mesmo IP (que você especificar) para esse endereço mac.

O ISC dhcp precisa de uma stanza de configuração como

host mycomputer {
  hardware ethernet 00:12:34:56:78:9A;
  fixed-address 192.168.1.10;
}

dnsmasq precisa de uma linha como:

dhcp-host=00:12:34:56:78:9A,192.168.1.10

cujos detalhes estão especificados na página de manual .

onde:

  • mycomputer é o nome do host do seu computador
  • 00: 12: 34: 56: 78: 9A é o endereço MAC do seu computador
  • 192.168.1.10 é o IP que você quer que seja sempre atribuído a esse endereço mac

Uma vez feito isso, você agora tem um IP 'estático' para fazer o encaminhamento de sua porta. Para fazer isso, você quer, como o @Avery Payne diz, fazer:

iptables -t nat -I PREROUTING -s ! {internal-network} -d {public-address} -p tcp --dport {port-on-public-address} -j DNAT --to-dest {internal-address}

onde:

  • internal-network é o endereço IP que representa sua rede, ou seja, 192.168.1.0
  • endereço interno é o endereço IP que representa o host que você deseja expor, por exemplo, 192.168.1.10
  • endereço público é o endereço IP da interface que está voltada para o seu provedor de serviços de Internet
  • porta-em-endereço público é o número da porta em que o tráfego chegaria se o computador interno pudesse vê-lo; note que esta regra não altera o número da porta à medida que ela avança, simplesmente passa o pacote ao longo

Observe o espaço entre o -s, o ponto de exclamação e {internal-network}, certifique-se de ter um espaço em ambos os lados.

    
por 03.05.2009 / 20:23
3

iptables -t nat -I PREROUTING -s ! {internal-network} -d {public-address} -p tcp --dport {port-on-public-address} -j DNAT --to-dest {internal-address}

onde:

  • internal-network é o endereço IP que representa sua rede, ou seja, 192.168.1.0
  • endereço interno é o endereço IP que representa o host que você deseja expor, por exemplo, 192.168.1.2
  • endereço público é o endereço IP da interface que está voltada para o seu provedor de serviços de Internet
  • porta-em-endereço público é o número da porta em que o tráfego chegaria se o computador interno pudesse vê-lo; note que esta regra não altera o número da porta à medida que ela avança, simplesmente passa o pacote ao longo

Observe o espaço entre o -s, o marcador de exclusão e {rede interna}, certifique-se de ter um espaço em ambos lados.

    
por 03.05.2009 / 20:20