iptables (NAT / PAT) para SSH e Samba

1

Eu preciso acessar uma caixa do Linux via SSH & Samba que está oculto / conectado atrás de outro.

Configuração: -

  
 A        switch    B         C
|----|    |---|    |----|    |----|
|eth0|----|   |----|eth0|    |    |
|----|    |---|    |eth1|----|eth1|
                   |----|    |----|

Por exemplo, SSH / Samba de A a C

Como se faz isso?
Eu estava pensando que isso não pode ser feito via IP sozinho? Ou pode?

Poderia B dizer "olá na eth0, se você está procurando 192.168.0.2, está aqui na eth1"?
Isso é NAT? Esta é uma grande rede privada, então e se outro PC tiver esse IP?!

Mais provável seria o PAT?
A diria "oi 192.168.109.15: 1234"
B diria "oi na eth0, o tráfego para a porta 1234 passa aqui eth1"
Como isso poderia ser feito?

E os demônios do SSH / Samba veriam as informações corretas sobre o cabeçalho do pacote e o trabalho ??

Informação de IP: -

A - eth0 - 192.168.109.2
B - eth0 - B1 = 192.168.109.15 B2 = 172.24.40.130
  - eth1 - 192.168.0.1
C - eth1 - 192.168.0.2

A, B & C são RHEL (RedHat) Mas os computadores com Windows podem ser conectados ao switch. Eu configurei o 192.168.0. * IPs, eles são mutáveis.

Atualização após resposta de Eddie

Alguns problemas (e o IP da máquina é diferente!)

De A: -
ssh 172.24.40.130 funciona ok, (pode chegar a B2)
mas ssh 172.24.40.130 -p 2022 -vv vezes com: -

OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to 172.24.40.130 [172.24.40.130] port 2022.
...wait ages...
debug1: connect to address 172.24.40.130 port 2022: Connection timed out
ssh: connect to host 172.24.40.130 port 2022: Connection timed out

De B2: -

$ service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  0.0.0.0/0            192.168.0.2         tcp dpt:22

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:2022 to:192.168.0.2:22

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

E ssh de B2 para C funciona bem: -

$ ssh 192.168.0.2

Informação do percurso: -

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
172.24.40.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth1
default         172.24.40.1     0.0.0.0         UG    0      0        0 eth0

$ ip route  
192.168.0.0/24 dev eth1  proto kernel  scope link  src 192.168.0.1
172.24.40.0/24 dev eth0  proto kernel  scope link  src 172.24.40.130
169.254.0.0/16 dev eth1  scope link
default via 172.24.40.1 dev eth0

Então, eu simplesmente não sei porque o encaminhamento de porta não funciona de A para B2?

    
por IanVaughan 29.04.2010 / 15:07

3 respostas

1

O que você chamou de PAT funcionaria. Você precisará ter o iptables em execução (ou algum firewall personalizável). Em seguida, execute os seguintes comandos:

iptables -t nat -A PREROUTING -p tcp --dport 22 -p DNAT --to-destination 192.168.0.2
iptables -t nat -A PREROUTING -p tcp --dport 135:139 -p DNAT --to-destination 192.168.0.2
iptables -t nat -A PREROUTING -p tcp --dport 445 -p DNAT --to-destination 192.168.0.2
service iptables save
echo 1 > /proc/sys/net/ipv4/ip_forward

No arquivo /etc/sysctl.conf, mude a linha:

net.ipv4.ip_forward = 0

para

net.ipv4.ip_forward = 1
    
por 29.04.2010 / 19:24
1

Para SSH

Em B:

#Arbitrary port
SOME_PORT=2022
iptables -t nat -I PREROUTING -p tcp --dport $SOME_PORT -j DNAT --to-destination 192.168.0.2:22
iptables -I FORWARD -p tcp --dport 22 -d 192.168.0.2 -j ACCEPT
#On a machine type A:
ssh -p $SOME_PORT

Para o Samba

É possível montar compartilhamentos C via nfs em B e depois configurar o samba em B? Se não, então você pode redirecionar as portas do samba:

iptables -t nat -I PREROUTING -p tcp -m multiport –dports 139,445 -j DNAT --to-destination 192.168.0.2
iptables -t nat -I PREROUTING -p udp –dport 137:138 -j DNAT --to-destination 192.168.0.2

Se o samba já está rodando em B, você poderia ligar um endereço IP adicional em B e encaminhar para C (você poderia fazer isso para o ssh e também para manter a porta 22. Desconfie de serviços iniciando no endereço 0.0.0.0) :

ifconfig eth0:1 192.168.109.16 netmask 255.255.255.0

iptables -t nat -I PREROUTING -d 192.168.15.109.16 -p tcp --dport 22 -j DNAT --to-destination 192.168.0.2
iptables -t nat -I PREROUTING -d 192.168.15.109.16 -p tcp -m multiport –dports 139,445 -j DNAT --to-destination 192.168.0.2
iptables -t nat -I PREROUTING -d 192.168.15.109.16 -p udp –dport 137:138 -j DNAT --to-destination 192.168.0.2

EDITAR Eu vejo que você ainda está tendo problemas; certifique-se de que:

  • A máquina B tem o encaminhamento de ip ativado: echo 1 > / proc / sys / net / ipv4 / ip_forward
  • A máquina C tem um caminho de volta para o usuário via máquina B. Se não, defina uma regra de mascarada na máquina B:

    iptables -t nat -I POSTROUTING -d 192.168.0.2 -p tcp --dport 22 -j MASQUERADE

O tcpdump pode ser útil para solucionar problemas. Na máquina B:

#capture and display packets heading to 192.168.0.2
tcpdump -i any -p tcp ip host 192.168.0.2 and port 22
    
por 29.04.2010 / 16:43
0

Hmmm. Bem, supondo que o switch sempre direcione o tráfego para a máquina B, você pode simplesmente fazer:

route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1

Isso deve dizer à máquina B que, se o tráfego entrar para o 192.168.0.0/24, envie-o para fora da eth1.

Isso deve funcionar e é um pouco mais fácil do que configurar um NAT. Você precisará certificar-se de que o switch saiba rotear o tráfego de 192.168.0.0/24 a 192.168.109.15 (Eth 0 em B).

@Ian: O roteamento não é necessariamente fácil, mas também não é tão difícil. Isso é o que os roteadores fazem. Supondo que seu switch é apenas um switch, sem capacidade de roteamento, você não pode usá-lo para definir a rota, mas você precisa ter um roteador em algum lugar ou sua rede é puramente uma LAN local sem acesso à Internet.

Verifique suas máquinas e descubra onde está o gateway padrão (nas caixas linux você pode digitar route sem argumentos. Sua rota de gateway padrão é aquela que se parece com:

default         192.168.1.1      0.0.0.0         UG    0      0        0 eth0

Esse é o seu roteador "principal". essa é a máquina que todas as máquinas procuram para descobrir onde estão as máquinas em outras sub-redes. É aí que você precisa adicionar uma rota apontando para a máquina B como o roteador de gateway para a sub-rede 192.168.0.0/24.

Se você puder me fornecer algumas informações sobre seu roteador, posso informar como adicionar essa rota.

    
por 29.04.2010 / 15:22