Я пытаюсь настроить свой компьютер как шлюз между двумя сетями, но по некоторым причинам не могу заставить его работать
Вот представление сети:
192.168.1.101 192.168.1.102 192.168.1.103 ...
| | |
\------------+------+-------+--------...
|
192.168.1.200 (eth1)
PC
(192.168.2.101 192.168.2.102 192.168.2.103 ...)
eth0:1 eth0:2 eth0:3
| | |
\------------+------+-------+--------...
|
192.168.2.200 (eth0)
|
...
На моем компьютере N виртуальных интерфейсов (eth0: *) с собственными IP-адресами на интерфейсе 192.168.2.200 (eth0). Я хочу, чтобы любое соединение (в основном TCP), которое атакует интерфейсы eth0: *, перенаправлялось на эквивалентный сервер 192.168.1.1 **.
Я пробовал использовать редир исполняемый файл, но поскольку серверы используют случайные номера портов для прослушивания (не могу это изменить), мне приходилось перезапускать процессы каждый раз, когда я проводил некоторые тесты.
Поэтому я использовал такие правила iptables (только для одного сервера для тестирования):
iptables -t nat -A PREROUTING -d 192.168.2.101 -j DNAT --to-destination 192.168.1.101
iptables -t nat -A POSTROUTING -d 192.168.1.101 -j SNAT --to-source 192.168.2.101
iptables -A FORWARD -i 192.168.2.101 -d 192.168.1.101 -j ACCEPT
Но любое соединение с 192.168.2.101:80 возвращает «Соединение отклонено», а любое соединение с 192.168.1.101:80 принимается.
Затем я «поиграл» с правилами iptables, не сбрасывая правила, и мне удалось подключиться к 192.168.2.101:80, который на самом деле был правильным сервером; но когда я попробовал другое соединение (с временным веб-сервером на TCP / 6666), соединение было отклонено, как указано выше.
У вас есть полный пример, чтобы он работал?
Примечание: я удалил все записи в iptables, чтобы провести другие тесты, поэтому я перезапускаю с нуля без того, что делал раньше ...
@lain: я включил переадресацию IP
$ cat /proc/sys/net/ipv4/ip_forward
1
iptables
есть матч, который вам подходит: он называется NETMAP
.
iptables -t nat -A PREROUTING -i eth0 --src 192.168.2.200/?? -j NETMAP --to 192.168.1.0/??
iptables -t nat -A PREROUTING -i eth1 --src 192.168.1.200/?? -j NETMAP --to 192.168.2.0/??
Что касается псевдонимов интерфейса, откажитесь от них. Устарели не только псевдонимы интерфейсов (если вы используете ip addr
, вы увидите, что ядро сопоставило их с собственной функциональностью (наличие нескольких адресов по интерфейсу), но здесь это кажется излишним, поскольку ни одна локальная служба их не использует.
Если вы используете этот хост для ответа на запросы ARP для этих IP-адресов в eth0, используйте функцию прокси-сервера ARP или добавьте локальный маршрут, сообщающий ядру, что все эти IP-адреса являются его собственными:
ip route add local 192.168.2.200/?? dev eth0