Есть роутер, который является opnvpn-клиентом к некоторому серверу.192.168.2.63 - ip роутера в локальной сети.
10.0.0.14 - ip роутера в туннеле openvpn
10.0.0.1 - ip сервера в туннеле openvpn
192.168.2.x1 - ip клиентской машины в локальной сети за роутером, соединение с которой я хочу пробросить на 10.0.0.1:3306Сервера по туннелю пингуют друг друга и могут взаимодействовать на уровне сервисов (например, с роутера можно подключиться через туннель на openvpn-сервер на порт 3306):
mysql -u user -h 10.0.0.1 -p - если запускать с роутера, то проходит.
За роутером есть локальная сеть (192.168.2.0/24), хотелось бы, чтобы все пакеты из локальной сети (а в моем примере ниже - с локального адреса 192.168.2.138) на порт 3306, адресованные внешнему серверу server1.com перенаправлялись на 10.0.0.1:3306.В фаероволле на роутере все цепочки с правилом ACCEPT по умолчанию. Поднят форвардинг и snat на выданный провайдером ip для нашего роутера.
Делаю DNAT:
iptables -t nat -A PREROUTING -s 192.168.2.138 -p tcp -d server1.com --dport 3306 -j DNAT --to-destination 10.0.0.1:3306
iptables -t nat -A PREROUTING -s 192.168.2.138 -p udp -d server1.com --dport 3306 -j DNAT --to-destination 10.0.0.1:3306Результат с машины 192.168.2.138:
C:\Program Files\MySQL\bin>mysql -u user -h server1.com -p
Enter password: ****
ERROR 2003 (HY000): Can't connect to MySQL server on 'server1.com' (10060)
Куда копать и что делать? Может дело в SNAT? Он мешает DNAT? Помогите, пожалуйста!
А зачем вообще тебе NAT?
просто пропиши маршруты, забудь про NAT.
>А зачем вообще тебе NAT?
>просто пропиши маршруты, забудь про NAT.Вы ошибаетесь, откуда VPN сервер (10.0.0.1) будет знать куда слать пакеты для подсети 192.168.2.0/24?
Если нет возможности на стороне VPN сервера прописать маршрут в вашу подсеть, то используй NAT
Что то типа
# iptables -t nat -A PREROUTING -s 192.168.2.138 -p tcp -d server1.com --dport 3306 -j DNAT --to-destination 10.0.0.14:3306
>Если нет возможности на стороне VPN сервера прописать маршрут в вашу подсеть,
>то используй NATвот про это вы впервые пишите.
>>Если нет возможности на стороне VPN сервера прописать маршрут в вашу подсеть,
>>то используй NAT
>
>вот про это вы впервые пишите.это было лишь предположение, о топологии сети ТС я ничего не знаю ;)
>[оверквотинг удален]
>Вы ошибаетесь, откуда VPN сервер (10.0.0.1) будет знать куда слать пакеты для
>подсети 192.168.2.0/24?
>
>Если нет возможности на стороне VPN сервера прописать маршрут в вашу подсеть,
>то используй NAT
>
>Что то типа
>
># iptables -t nat -A PREROUTING -s 192.168.2.138 -p tcp -d server1.com
>--dport 3306 -j DNAT --to-destination 10.0.0.14:3306Но ведь 10.0.0.14 - это адрес моего роутера в туннеле, на котором не запущен Mysql на порту 3306, а Mysql висит на 10.0.0.1.
И --to-destination 10.0.0.14:3306 отправит пакеты на несуществующий порт (или я чего не понял?) ?
Или вы имеете виду такое (счас попробовал, все равно не работает):
iptables -t nat -A PREROUTING -s 192.168.2.138 -p tcp -d 10.0.0.14 --dport 3306 -j DNAT --to-destination 10.0.0.1:3306
?
>[оверквотинг удален]
>
>
>И --to-destination 10.0.0.14:3306 отправит пакеты на несуществующий порт (или я чего не
>понял?) ?
>
>Или вы имеете виду такое (счас попробовал, все равно не работает):
>
>iptables -t nat -A PREROUTING -s 192.168.2.138 -p tcp -d 10.0.0.14 --dport
>3306 -j DNAT --to-destination 10.0.0.1:3306
> И --to-destination 10.0.0.14:3306 отправит пакеты на несуществующий порт (или я чего не понял?да, то я ошибся :)
# iptables -t nat -A POSTROUTING -s 192.168.2.138 -p tcp -d 10.0.0.1 --dport 3306 -o tun0 -j SNAT --to-source 10.0.0.14
вместо tun0 подставь свое устройство
>[оверквотинг удален]
>>iptables -t nat -A PREROUTING -s 192.168.2.138 -p tcp -d 10.0.0.14 --dport
>>3306 -j DNAT --to-destination 10.0.0.1:3306
>> И --to-destination 10.0.0.14:3306 отправит пакеты на несуществующий порт (или я чего не понял?
>
>да, то я ошибся :)
>
># iptables -t nat -A POSTROUTING -s 192.168.2.138 -p tcp -d 10.0.0.1
>--dport 3306 -o tun0 -j SNAT --to-source 10.0.0.14
>
>вместо tun0 подставь свое устройствоСпасибо большое! Заработало!