Назад | Перейти на главную страницу

Настройка iptables (NAT / PAT) для SSH и Samba

Мне нужно получить доступ к ящику Linux через SSH и Samba, который скрыт / подключен за другим.

Настроить :-

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

Например, SSH / Samba от A до C

Как это сделать?
Я думал, что это нельзя сделать только по IP? Или может?

Мог ли Б сказать «привет на eth0, если вы ищете 192.168.0.2, он здесь на eth1»?
Это NAT? Это большая частная сеть, что делать, если другой компьютер имеет этот IP ?!

Скорее было бы PAT?
А сказал бы "привет 192.168.109.15:1234"
B сказал бы "привет на eth0, трафик для порта 1234 идет здесь eth1"
Как это могло быть сделано?

И будут ли демоны SSH / Samba видеть правильную информацию заголовка пакета и работать?

Информация об 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 - это RHEL (RedHat), но к коммутатору можно подключить компьютеры с Windows. Я настроил IP 192.168.0. *, Они изменяемы.


Обновить после ответа от Эдди

Немного проблем (И IP машины B другой!)

Из :-
ssh 172.24.40.130 работает нормально, (можно добраться до B2)
но ssh 172.24.40.130 -p 2022 -vv время ожидания с: -

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

От 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

И ssh от B2 до C работает нормально: -

$ ssh 192.168.0.2

Информация о маршруте: -

$ 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

Так что я просто не знаю, почему переадресация портов не работает от A к B2?

Для SSH

На 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

Для самбы

Можно ли смонтировать общие ресурсы C через nfs на B, а затем настроить samba на B? Если нет, то вы можете перенаправить порты самбы:

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

Если samba уже запущена на B, вы можете привязать дополнительный IP-адрес к B и перенаправить на C (вы можете сделать это и для ssh, чтобы сохранить порт 22. Остерегайтесь служб, начинающихся с адреса 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

РЕДАКТИРОВАТЬ Я вижу, у тебя все еще проблемы; удостоверься что:

  • На машине B включена переадресация ip: echo 1> / proc / sys / net / ipv4 / ip_forward
  • У машины C есть обратный путь к пользователю через машину B. Если нет, то установите правило маскарада на машине B:

    iptables -t nat -I ПОСТРОУТИРОВАНИЕ -d 192.168.0.2 -p tcp --dport 22 -j MASQUERADE

tcpdump может быть полезен для устранения неполадок. На машине 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

То, что вы назвали PAT, подойдет. Вам понадобится запустить iptables (или какой-нибудь настраиваемый брандмауэр). Затем выполните следующие команды:

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

В файле /etc/sysctl.conf измените строку:

net.ipv4.ip_forward = 0

к

net.ipv4.ip_forward = 1

Хммм. Что ж, предполагая, что коммутатор всегда направляет трафик на машину B, вы можете просто сделать:

route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1

Это должно сообщить машине B, что, если трафик поступает для 192.168.0.0/24, отправьте его через eth1.

Это должно работать, и это немного проще, чем настраивать NAT. Вам необходимо убедиться, что коммутатор знает, как маршрутизировать трафик с 192.168.0.0/24 на 192.168.109.15 (Eth 0 на B).

@Ian: Маршрутизация не обязательно проста, но и не так уж и сложна. Вот что делают маршрутизаторы. Предполагая, что ваш коммутатор - это просто коммутатор без возможности маршрутизации, вы не можете использовать его для установки маршрута, но у вас должен быть где-то маршрутизатор, или ваша сеть представляет собой чисто локальную локальную сеть без доступа в Интернет.

Проверьте свои машины и узнайте, где находится шлюз по умолчанию (в окнах Linux вы можете просто ввести route без аргументов. Ваш маршрут шлюза по умолчанию выглядит следующим образом:

default         192.168.1.1      0.0.0.0         UG    0      0        0 eth0

Это ваш "основной" маршрутизатор. это машина, на которую обращаются все машины, чтобы выяснить, где находятся машины в других подсетях. Здесь вам нужно добавить маршрут, указывающий на машину B как маршрутизатор шлюза для подсети 192.168.0.0/24.

Если вы можете дать мне некоторую информацию о своем маршрутизаторе, я могу рассказать вам, как добавить этот маршрут.