У меня есть экземпляр AWS Lightsail

  • на который я хотел бы направить весь трафик из моей сети, направленный на определенный (то есть: 192.168.1.225) IP-адрес
  • и из которого я хотел бы направить весь трафик, направленный на 192.168.1.0/24 через мой публичный IP

Я пробовал через NAT iptables, но это не работает в любом случае:

# on my router
iptables -t nat -A  PREROUTING -d 192.168.1.225 -j DNAT --to-destination $AWS_ADDRESS
iptables -t nat -A POSTROUTING -s $AWS_ADDRESS  -j SNAT --to-source 192.168.1.225

а также

# on lightsail
iptables -t nat -A  PREROUTING -d 192.168.1.144 -j DNAT --to-destination $PUBLIC_IP
iptables -t nat -A POSTROUTING -s $PUBLIC_IP -j SNAT --to-source 192.168.1.144

Что я здесь не так делаю?

2 ответа2

0

Вы рассматривали / пытались использовать ssh с переадресацией портов? Я думаю, что вы можете ожидать только переадресации нескольких портов, но похоже, что именно это будет для вас.

0

Первая проблема: вы пытаетесь использовать адрес, который является локальным для вашей подсети. Трафик из той же подсети не проходит через маршрутизатор и не зависит от правил брандмауэра маршрутизатора. Когда другие компьютеры в вашей локальной сети хотят достичь 192.168.1.225 , они вместо этого немедленно отправляют локальные запросы ARP, чтобы узнать его MAC-адрес.

Этого можно избежать, используя другую подсеть для хоста AWS или настроив Proxy-ARP на маршрутизаторе, заставив его подделать ответы ARP для этого адреса.

Вторая проблема: IP-пакеты могут нести только один пункт назначения, поэтому DNAT теряет информацию - получатель (ваш локальный маршрутизатор) больше не знает, каким должен был быть первоначальный пункт назначения. (Эта информация есть только у того хоста, который выполнил перевод.) Таким образом, хост AWS может DNAT одного адресата по вашему локальному общему адресу, но не может DNAT целого /24.

Чтобы избежать этого, вам необходимо туннелировать пакеты - вместо их трансляции инкапсулируйте исходный пакет во второй заголовок IP. (Также называется VPN.) Существует множество вариантов настройки туннеля в Linux, от простого IPIP или GRE до IPsec, WireGuard, Tinc или OpenVPN.

Большинство туннелей /VPN-типов являются L3 (они несут IP-пакеты внутри), поэтому вам все равно нужно будет использовать номер подсети, отличный от обычной подсети локальной сети, и маршрутизатор должен фактически маршрутизировать между интерфейсом LAN и интерфейсом VPN / туннеля.

Некоторые туннели поддерживают режим L2 (несут кадры Ethernet внутри), например, EoIP, gretap, OpenVPN - отвод типа -de, ZeroTier. Эти туннельные интерфейсы L2 могут быть соединены с вашей локальной сетью, что позволяет использовать одну и ту же подсеть с обеих сторон (с полностью работающим ARP), что вы и просили изначально

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