У меня следующая конфигурация локальной сети (все машины работают под управлением Slackware 14.2):
INTERNET
|
| 192.168.10.1
+----------+
|ISP ROUTER|
+----------+
| |
+----+ +-----+
192.168.10.10 | (eth0) | 192.168.10.20 (eth0)
+--------+ +--------+
| HOST A | | HOST B |
+--------+ +--------+
| 192.168.50.50 (eth1)
|
| 192.168.50.100 (eth0)
+--------+
| HOST C |
+--------+
HOST A
и HOST B
подключены через маршрутизатор моего интернет-провайдера и могут подключаться друг к другу. HOST C
подключен только к HOST B
и может поговорить с HOST B
. Однако я хотел бы иметь возможность подключиться к HOST C
из HOST A
. Я не могу настроить маршрутизатор своего интернет-провайдера. HOST A
и HOST B
должен иметь возможность подключиться к Интернету, поэтому изменение шлюза по умолчанию на какой-либо другой, кроме маршрутизатора моего интернет-провайдера, не является вариантом. HOST C
не допускается подключение к Интернету.
Я думаю, что по крайней мере на HOST B
Я должен применить эти iptables
правила:
iptables -A FORWARD -s 192.168.50.100 -d 192.168.10.0/24 -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -d 192.168.50.100 -s 192.168.10.0/24 -i eth0 -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.50.100 -d 192.168.10.0/24 -o eth0 -j MASQUERADE
Однако я не уверен, достаточно ли этих правил для HOST B
и я не знаю как настроить HOST A
. Любые идеи?
После некоторых дополнительных исследований я нашел решение. Первый, HOST B
должен быть настроен для пересылки пакетов от и до HOST C
:
iptables -A FORWARD -s 192.168.50.100 -d 192.168.10.0/24 -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -d 192.168.50.100 -s 192.168.10.0/24 -i eth0 -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.50.100 -d 192.168.10.0/24 -o eth0 -j MASQUERADE
затем HOST A
и HOST C
нужно добавить дополнительные маршруты через HOST B
, чтобы они могли найти друг друга.
На HOST A
проблема как root:
route add -host 192.168.50.100 gw 192.168.10.20
На HOST C
проблема как root:
route add -host 192.168.10.10 gw 192.168.50.50
Вот и все. Потенциальные межсетевые экраны на любом из задействованных хостов, конечно же, должны быть настроены соответствующим образом, чтобы разрешить трафик.
Ты в шланге. Без возможности настройки HOST A или маршрутизатор ISP, вы не можете этого сделать.
Если / когда вы можете настроить HOST A, вы можете указать ему более конкретный (т.е. нестандартный) маршрут для 192.168.50.0/24 и указать его на HOST B в качестве следующего перехода, а затем использовать iptables на HOST B для пересылки на ( и из) HOST C. Это немного более чистый способ сделать это, так как вы полностью обойдете маршрутизатор ISP.
Если / когда вы можете настроить ISP ROUTER, вы можете сказать ему, что сеть 192.168.50.0/24 существует (сегодня он этого не знает), и чтобы добраться туда, ему необходимо отправить трафик через HOST B. (кроме: в этом случае Маршрутизатор интернет-провайдера должен отправить Перенаправление ICMP обратно к HOST A, когда он получит трафик, предназначенный для C.)
Итак, у вас есть неразрешимая проблема в том, что ни один HOST A или маршрутизатор ISP не знают об этой другой подсети. Пока вы тем или иным образом не сломаете этот затор, вам не повезло.
Кроме того, ваши операторы iptables подразумевают, что вы строго пытаетесь пересылать пакеты только для HOST C - если вы когда-либо планируете разместить больше устройств в этой подсети, вы можете подумать о создании правила пересылки для всей подсети / 24, а не только один хозяин.