我有一个关于iptable prerouting的问题.
我对网络/路由/ iptables并不熟悉,所以我希望这根本不是一个愚蠢的问题.所以我要求你的理解和放纵.
我对网络/路由/ iptables并不熟悉,所以我希望这根本不是一个愚蠢的问题.所以我要求你的理解和放纵.
我所做的是:
我使用LXC来分隔容器中的应用程序.要访问容器中的服务(可能是apache2),我必须像这样进行预处理:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 20080 -j DNAT --to <container-ip>:80
到目前为止,这么好,按预期工作.
想象一下,主机系统也运行apache2(端口80).它分配了1个NIC和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 packetfilter也适用于IP地址,网络端口和协议,而不适用于DNS /主机名.
你的选择是:
>配置桥接,以便您的容器获得公共IP地址
比限制在主机和设置DNS的私有范围
因此.
>使用在DNS主机名级别工作的apache反向代理功能(或类似功能),并在应用程序级别路由HTTP请求:
例如:
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>