Мне нужно получить доступ к ящику 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.15B2 = 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
РЕДАКТИРОВАТЬ Я вижу, у тебя все еще проблемы; удостоверься что:
У машины 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.
Если вы можете дать мне некоторую информацию о своем маршрутизаторе, я могу рассказать вам, как добавить этот маршрут.