ПРИМЕЧАНИЕ. Если клиентские устройства (
computer B
в этом примере) хотят подключиться к Интернету через компьютер шлюза, возможно, им все равно необходимо настроить разрешение сервера имен. Это не объясняется здесь (шлюз не обязательно обслуживает Интернет).
Я пытаюсь понять основы маршрутизации сетей.
Поэтому я экспериментирую с локальной сетью (сейчас мне не нужен интернет, только связь по локальной сети).
Я знаю, что конфигурация сети довольно сложная вещь, но я просто пытаюсь заставить компьютер (скажем, A) выступать в качестве шлюза для другого (скажем, B) (оба работают под управлением Ubuntu Linux).
Мне нужно только B, чтобы быть в состоянии достичь маршрутизатора, который доступен только для A.
В этом случае:
Router for computer A --> 192.168.0.1
Computer A - eth0 --> 192.168.0.2
Computer A - eth1 --> 192.168.1.1
Computer B - eth0 --> 192.168.1.2
Компьютер А нормально подключается к роутеру .
Компьютеры A и B нормально соединяются (ping, SSH ... и т. Д.) Между ними .
Компьютер B не может связаться с маршрутизатором для компьютера A.
Я думал, что простое добавление на B компьютера A в качестве шлюза по умолчанию и активация IP-пересылки на A сделает B доступным к маршрутизатору для A:
luis@ComputerB:~$ sudo route add default gw 192.168.1.1
luis@ComputerB:~$ sudo routel
target gateway source proto scope dev tbl
127.0.0.0 broadcast 127.0.0.1 kernel link lo local
127.0.0.0 8 local 127.0.0.1 kernel host lo local
127.0.0.1 local 127.0.0.1 kernel host lo local
127.255.255.255 broadcast 127.0.0.1 kernel link lo local
192.168.1.0 broadcast 192.168.1.2 kernel link eth0 local
192.168.1.2 local 192.168.1.2 kernel host eth0 local
192.168.1.255 broadcast 192.168.1.2 kernel link eth0 local
default 192.168.1.1 eth0
169.254.0.0 16 link eth0
192.168.1.0 24 192.168.1.2 kernel link eth0
А на компьютере А (промежуточный шлюз):
root@ComputerA:~$ echo 1 > /proc/sys/net/ipv4/ip_forward
Компьютер B все еще может пропинговать компьютер A, но маршрутизатор для A не отвечает:
luis@ComputerB:~$ ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
^C
(Нет ответа на пинг)
Является ли это правильной процедурой, чтобы заставить компьютер под управлением Linux действовать в качестве шлюза для другого компьютера простым способом?
источник
Для правильной работы маршрутизации между двумя компьютерами Linux, выступающими в качестве шлюзов, необходимо сделать несколько вещей:
Маршруты должны быть добавлены к обоим интерфейсам на маршрутизаторе.
Локальный шлюз должен быть указан для удаленной сети на обоих шлюзах. Это позволяет компьютерам в локальной сети знать, куда отправлять пакеты для удаленной сети. Шлюзом должен быть IP-адрес компьютера, который будет отправлять пакеты в удаленную сеть.
IP-маскарадинг должен быть включен, чтобы позволить NAT функционировать между шлюзами.
Вам может потребоваться указать источник и назначение, так как вы используете один и тот же интерфейс для маскировки:
и другой шлюз:
Для каждого шлюза трафик локальной сети должен приниматься на соответствующем интерфейсе, например:
или
Существует множество ссылок и похожих вопросов, на которые можно ссылаться для решения возникающих у вас проблем.
В данном конкретном случае неправильным является то, что на обоих компьютерах настройка маршрута и шлюза не завершена, а преобразование сетевых адресов (NAT) не было включено с помощью iptables, что позволяет шлюзам переносить запрос с компьютера в другой подсети. от их имени.
Это также важно при настройке интернет-соединения, так как вы несете ответственность за один конец соединения (например, используете компьютер Linux в качестве шлюза для соединения PPPoE).
источник