AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 606405
Accepted
Programster
Programster
Asked: 2014-06-20 04:10:49 +0800 CST2014-06-20 04:10:49 +0800 CST 2014-06-20 04:10:49 +0800 CST

反向代理 Linux 容器

  • 772

我正在尝试在我的 ubuntu 14.04 主机上设置反向代理,以便我可以运行多个网站,每个网站都在自己的 LXC 容器中(一天 docker,但一次一步)。在此示例中,站点/主机名是:

ubuntu1.mydomain.com
ubuntu2.mydomain.com

这些容器是使用名称 ubuntu1 和 ubuntu2 创建的。

当我尝试使用以下命令设置 iptables 以转发到这些主机名时:

sudo iptables -t nat -A PREROUTING -d ubuntu1.mydomain.com -j DNAT --to-destination 10.0.3.xxx

(10.0.3.xxx 是 lxc 网桥 10.0.3.1 上容器的 IP 地址)我收到以下错误:

iptables v1.4.21: host/network `ubuntu1.mydomain.com' not found

有没有办法解决这个问题?

iptables
  • 3 3 个回答
  • 3196 Views

3 个回答

  • Voted
  1. Best Answer
    Felix Frank
    2014-06-20T04:22:51+08:002014-06-20T04:22:51+08:00

    你的方法有缺陷。您不想在配置时使用域名iptables。

    您的防火墙不知道客户端已解析哪个域以访问您的主机系统。它所看到的只是 IP 地址和端口号。

    如果您想通过公共 IP 访问容器,您需要选择一个在外部接口上可用的不同 IP,并且只需

    iptables -t nat -A PREROUTING -d <public-ip-for-ubuntu1> -j DNAT --to-destination 10.0.3.xxx
    

    如果没有为您的容器指定 IP,实际上是无法做到这一点的。

    如果您无法添加此类地址,您可以使用将特定端口映射到容器中的其他端口的解决方法,例如

    iptables -t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 10.0.3.xxx:22
    

    通过 port 使容器的 SSH 服务可用10022。

    • 2
  2. Peter
    2014-07-18T01:45:12+08:002014-07-18T01:45:12+08:00

    为此,我不同意 iptables 是合理的说法。
    正如 Felix 所说,iptables 是一个防火墙。
    它不是一个 ip - 路由组件。
    有几种方法可以在 linux 上设置虚拟网络。
    最简单的方法是通过配置虚拟 ip,例如

     ifconfig eth0:1 192.168.0.10 up (notice the eth0:1 which is setting up a virtual device for eth0)<br />
    

    (这是非持久性的,将在重新启动后消失)或dnsmasq。
    由于这正是您正在做的事情(为您的 linux 容器设置虚拟网络),
    因此您应该遵守相应的文档。反向代理再次是一个完全不同的主题,因为这可以通过您的 dns 区域文件和 Apache HTTP 服务器中的正确 dns 条目轻松完成,它可以将不同的域名映射到不同的 ip 或端口,例如

    <VirtualHost *:80>
      ServerAdmin [email protected]
      ServerName ubuntu1.mydomain.com #this is the mapping configuring your server to be the one
    
      ProxyPreserveHost       On
      ProxyRequests           Off
    
      <Proxy *>
        Order deny,allow
        Allow from all
      </Proxy>
    
    ProxyPass / http://10.0.3.10:9006/
    ProxyPassReverse http://10.0.3.10:9006/ /
    

    但是当然,只有在您想使用 linux 容器时才需要代理。

    • 0
  3. bmullan
    2014-07-24T10:01:44+08:002014-07-24T10:01:44+08:00

    对于 HTTP 和 HTTPS,这将有助于从 Internet 获取可访问的容器:

    sudo iptables -t nat -I PREROUTING -p tcp -d <host-ip> --dport 443 -j DNAT --to <lxc-ip>:443  
    sudo iptables -t nat -I PREROUTING -p tcp -d <host-ip> --dport 80 -j DNAT --to <lxc-ip>:80  
    sudo iptables -A FORWARD -p tcp -d <lxc-ip> --dport 443 -j ACCEPT  
    sudo iptables -A FORWARD -p tcp -d <lxc-ip> --dport 80 -j ACCEPT  
    

    不过,对于许多 Web 服务器/容器来说,这可能不是一个合适的解决方案。

    • 0

相关问题

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • iptables 单个规则中的多个源 IP

  • 存储 iptables 规则的规范方法是什么

  • 使用 iptables 和 dhcpd 进行端口转发

  • 根据 Apache 日志数据自动修改 iptables 以阻止行为不良的客户端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve