
У меня есть 2 ВМ, одна с частным IP-адресом (за NAT), а другая с публичным. Я сделал SSH-туннель с NAT. Цель — подключить публичную ВМ к сети за NAT и перенаправить через нее часть трафика. Суть в том, чтобы подменить приложение, работающее в этой сети, похожим на приложение на публичном сервере (в тестовых целях).
Поэтому я сделал что-то вроде этого:
Включить туннель
sudo ssh [email protected] -w 0:0
Адресация
ifconfig tun0 10.253.253.1/30 pointopoint 10.253.253.2 - Local
ifconfig tun0 10.253.253.2/30 pointopoint 10.253.253.1 - Remote
Добавление маршрута во внутреннюю сеть
ip route add 10.0.3.0/24 via 10.253.253.1
Для двусторонней связи (на самом деле не уверен насчет этого)
sudo arp -sD 10.253.253.1 ens18 pub
Переадресация порта на локальном компьютере
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -I FORWARD 1 -s 10.253.253.1 -j ACCEPT
sudo iptables -I FORWARD 1 -d 10.253.253.1 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.253.253.1 -j MASQUERADE
И на самом деле это почти работает, когда я отключаю службу приложений на локальном хосте, она перенаправляет трафик на удаленный. Но есть главная проблема - этот локальный сервер отправляет запросы на порт 4660, а другие (внутренние приложения) отвечают на порт 4661. Похоже, мне нужно дополнительное правило, чтобы перенаправлять весь входящий трафик на порт 4661 в туннельный интерфейс на порт 4660. Как с этим справиться? Я не очень хорошо знаком с iptables, но я пробовал что-то вроде этого, но это не работает:
iptables -A PREROUTING -t nat -i eth0 -p udp --dport 4661 -j DNAT --to 10.253.253.1:4660
iptables -A FORWARD -p udp -d 10.253.253.1 --dport 4660 -j ACCEPT
решение1
Хорошо, я заставил это работать:
iptables -A PREROUTING -t nat -i eth0 -p udp --dport 4661 -j DNAT --to 10.253.253.2:4661(remote tun address)