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

Перенаправление VPN iptables: из сети в сеть

Я пытался поискать где-нибудь на этом сайте, но не нашел ничего, что соответствовало бы этой проблеме. Прямо сейчас у меня открыт туннель ipsec между нашей локальной сетью и удаленной сетью.

В настоящее время локальный ящик, на котором запущен Openswan ipsec с открытым туннелем, может проверить связь с удаленным ящиком ipsec и любым другим компьютером в удаленной сети. Зайдя на удаленный компьютер, я могу пропинговать любой ящик в нашей локальной сети. Вот что работает, вот что нет:

Я не могу пинговать ни один из удаленных компьютеров через локальную машину, которая не является ящиком ipsec.

Вот схема нашей сети:

[local ipsec box] ----------\
                             \
[arbitrary local computer] --[local gateway/router] -- [internet] -- [remote ipsec box] -- [arbitrary remote computer]

Локальный ящик ipsec и произвольный локальный компьютер не имеют прямого контакта, вместо этого они обмениваются данными через шлюз / маршрутизатор. Маршрутизатор настроен на пересылку запросов с локальных компьютеров для удаленной подсети в ящик ipsec. Это работает.

Проблема в том, что ipsec ничего не пересылает.

Каждый раз, когда произвольный локальный компьютер проверяет что-то в удаленной подсети, это ответ:

[user@localhost ~]# ping 172.16.53.12
PING 172.16.53.12 (172.16.53.12) 56(84) bytes of data.
From 10.31.14.16 icmp_seq=1 Destination Host Prohibited
From 10.31.14.16 icmp_seq=2 Destination Host Prohibited
From 10.31.14.16 icmp_seq=3 Destination Host Prohibited

Вот трассировка:

[root@localhost ~]# traceroute 172.16.53.12
traceroute to 172.16.53.12 (172.16.53.12), 30 hops max, 60 byte packets
 1  router.address.net (10.31.14.1)  0.374 ms  0.566 ms  0.651 ms
 2  10.31.14.16 (10.31.14.16)  2.068 ms  2.081 ms  2.100 ms
 3  10.31.14.16 (10.31.14.16)  2.132 ms !X  2.272 ms !X  2.312 ms !X

Это IP-адрес нашего ipsec-бокса, которого он достигает, но не пересылается.

В поле IPSec я включил переадресацию IP в /etc/sysctl.conf net.ipv4.ip_forward = 1

И я попытался настроить IPTables для пересылки:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [759:71213]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 500 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 4500 -j ACCEPT
-A INPUT -m policy --dir in --pol ipsec -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -s 10.31.14.0/24 -d 172.16.53.0/24 -j ACCEPT
-A FORWARD -m policy --dir in --pol ipsec -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Мне не хватает правила в IPTables? Я что-то забыл?

ПРИМЕЧАНИЕ: Все машины работают под управлением CentOS 6.x Изменить: Примечание 2: eth1 - единственный сетевой интерфейс в локальном поле ipsec.

Осмотревшись и следуя вашим предложениям, я решил на минуту переосмыслить свой подход и заметил очень болезненную ошибку. 172.16.53.0/24 должен быть 172.16.53.0/28. Теперь работает как шарм. Мораль истории: убедитесь, что вы правильно указали адреса вашей подсети, ребята!