У меня есть маршрутизатор на Tomato (shibby), работающий на сервере OpenVPN (с TAP; интерфейс - tap21 на маршрутизаторе). Различные ресурсы (включая некоторые рабочие станции) физически подключены к eth0 на этом маршрутизаторе. У меня есть другое физическое устройство по всей стране, на котором запущены nginx и другие сервисы. Теперь, я знаю , что это не большой топографический установки, но неизменные требуют обстоятельства , что устройство работает под Nginx должен быть клиентом маршрутизатора VPN и все входящего трафика и исходящего трафика этого устройства на порты 80 и 443 должны быть туннелировано через это VPN-соединение.

В общем, что должно произойти:

  1. example.com разрешает IP WAN на маршрутизаторе
  2. маршрутизатор перенаправляет порты 80 и 443 через интерфейс tap21 на сервер nginx
  3. Ответ сервера nginx возвращается через tap21 и направляется обратно через WAN

Часть # 2 - это то, с чем у меня проблемы.

В настоящее время сервер может обмениваться данными с другими устройствами в подсети (может пинговать другие ресурсы в VPN, а также ресурсы, физически подключенные к eth0 на маршрутизаторе) и может получать доступ к Интернету через VPN. Однако я не смог перенаправить порты из WAN на адрес сервера в VPN. Первая попытка, которую я предпринял, состояла в том, чтобы просто попробовать графический интерфейс переадресации портов в Tomato (но, похоже, это не работает для IP-адресов в VPN, только для IP-адресов eth0 или wlan0). Когда это не сработало, я попытался добавить правила iptables, но, поскольку я все еще в значительной степени не удовлетворен iptables, мне удалось найти фрагменты из других ответов только для вопросов, которые на самом деле не относятся к этой странной и проблемной сетевой настройке. , Вот что я пытаюсь (используя 10000 в качестве тестового порта с прослушиванием nc):

iptables -t nat -I PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 192.168.12.53:10000
iptables -I FORWARD -d 192.168.12.53 -p tcp --dport 10000 -j ACCEPT

Однако я не могу понять, что происходит с пакетами, перенаправляемыми таким образом - они, конечно, не достигают сервера. По сути, мой вопрос заключается в том, как я могу переадресовывать входящие соединения на определенных портах на конкретное устройство в VPN? Исходящий трафик через порты 80 и 443 из других ресурсов маршрутизатора eth0 , конечно же, не должен быть затронут.

Спасибо за любую помощь, вы можете предоставить!

1 ответ1

0

После долгих попыток я разобрался (хотя я приветствую любые комментарии, которые могут объяснить, почему это работает). Во-первых, очевидно, что отсутствие правила POSTROUTING заставляло сервер отбрасывать пакеты. Изучив правила iptables которые Tomato создает через графический интерфейс, я создал похожие записи для WANPREROUTING , wanin и INPUT ; Я не совсем уверен, зачем нужно правило INPUT ; возможно, его можно удалить, а флаг -m добавить в wanin?

iptables -t nat -I WANPREROUTING -i vlan2 -p tcp -m tcp --dport 80 -j DNAT --to-destination {SERVER_IP}:80
iptables -I wanin -d {SERVER_IP} -i vlan2 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m tcp -i vlan2 --dport 80 -m state --state NEW -j shlimit

Графический интерфейс Tomato не создает правила POSTROUTING автоматически, поэтому мне пришлось это сделать:

iptables -t nat -I POSTROUTING -p tcp -d {SERVER_IP} --dport 80 -o tun22 \! -s {GATEWAY_IP} -j SNAT --to-source {GATEWAY_IP}

Я сделал такие наборы правил для портов 80 и 443, и теперь я могу получить доступ к серверу через VPN из Интернета.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .