У меня вопрос по предварительной маршрутизации iptable. Я не очень знаком с сетями / маршрутизацией / iptables, поэтому надеюсь, что это совсем не глупый вопрос. Поэтому я прошу вашего понимания и снисхождения.
Что я делаю: я использую LXC для разделения приложений в контейнерах. Для доступа к сервису (возможно, apache2) в контейнере мне нужно выполнить предварительную маршрутизацию следующим образом:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 20080 -j DNAT --to <container-ip>:80
Пока все хорошо, работает как надо.
Представьте, что на хост-системе также работает apache2 (порт 80). Ему присвоены 1 сетевая карта и 2 DNS-имени: DNS1 (HostRecord) и DNS2 (Псевдоним DNS1) Что я хочу сделать, так это выполнить PREROUTE без использования порта dport, а с использованием DNS-имени, чтобы:
http://DNS1:80 #ends up at the host apache2
http://DNS2:80 #ends up at lxc-container's apache2 (at the the same host)
Возможно ли, и если да, то как настроить iptables?
Пакеты TCP / IP направляются на IP-адреса и сетевые порты, а не на имена хостов.
Поэтому фильтр пакетов iptables также работает с IP-адресами, сетевыми портами и протоколами, а не с DNS / именами хостов.
Ваши варианты:
например:
NameVirtualHost *:80
<VirtualHost *:80>
# The DNS1 site is hosted locally
ServerName DNS1
DocumentRoot /var/www./...
</VirtualHost>
<VirtualHost *:80>
ServerName DNS2
# Forward all requests to container:
Proxypass / http://<container-ip>
ProxypassReverse / http://<container-ip>
</VirtualHost>