静的IPを使用したブリッジLXCコンテナーのセットアップ


15

ホスト上に複数のLXCコンテナをセットアップしようとしています。各コンテナには独自のパブリック静的IPがあります。

私のホストは最新のUbuntuを実行しています。eth0という名前の単一のネットワークインターフェイスがあります。静的IPはインターネットからping可能で、名前はeth0:210、eth0:211 ...です。コロンの後の数字はアドレスの最下位バイトです。これらのインターフェイスに加えて、ホストのパブリックIPにbr0セットアップがあります。lo、veth2LPP9A、およびlxcbr0インターフェイスもあります。lxcbr0にはプライベートIPのアドレスがあります。

ホスト/ etc / network / interfacesは次のようになります。

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        [...]

これまで、さまざまなオンラインソースを使用してeth0をホストするLXCコンテナーのブリッジングを行い、パブリックIP使用してセットアップを支援できるようにしました。

コンテナの設定ファイルには次のものがあります。

lxc.network.type = veth
lxc.network.link = br0

問題が発生したため、このファイルから静的lxc.network.ipv4構成を削除しました。この構成でlxc-ls --fancyを実行すると、出力に同じパブリックIPが2回表示されます。さらに、コンテナの/ etc / network / interfacesのサブネット構成を台無しにします。

コンテナのinterfacesファイルといえば、次のようなものです。

auto eth0
iface eth0 inet static
        address [...]
        netmask 255.255.255.255
        #gateway [...]
        dns-nameservers 8.8.8.8

        post-up route add [...] dev eth0
        post-up route add default gw [...]
        post-down route del [...] dev eth0
        post-down route del default gw [...]

ゲートウェイをコメントアウトし、このファイルにroute addコマンドを追加する必要がありました。そうしないと、コンテナの起動に数分かかります。

ホスト上の/ proc / sys / net / bridge / bridge-nf- *ファイルはすべて0に設定されます。/proc/sys/net/ipv4/ip_forward値は1です。

問題は、コンテナの「route -n」が本来あるべきように見えても、コンテナからpingを実行できないことです。コンテナのIPにSSHで接続すると、私がホストに接続されます。

編集:ホストからコンテナの静的IPを削除することは役に立ちましたが、今では新しいエラーが発生しています。ホストからコンテナーをpingしようとすると、リダイレクトHostFrom、新しいネクストホップが発生します。パケットは、ゲートウェイからホストに繰り返し送られます。ホストからtracerouteを実行すると、最初のストップがゲートウェイにあることがわかります。その後、他のすべてのルートは* * *です。コンテナがオンラインかどうかに関係なく、同じ問題が発生します。

回答:


17

実際にホストからアドレスとゲートウェイを設定し、キーワードを使用してインターフェースにまったく触れないようにコンテナを設定できます。manual

これをゲスト内に配置します/etc/network/interfaces

auto eth0
iface eth0 inet manual

また、インターフェースを設定するためにコンテナの設定ファイルに任せます:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc-bridge-nat
lxc.network.ipv4 = 192.168.100.16/24
lxc.network.ipv4.gateway = auto

ゲストは、既にBIOSがインターフェイスを設定しているように動作し、それを使用するだけです。

特に探検lxc.network.ipv4.gateway


THX!これは私の命を救いました...私のコンテナは常に新しいdhcpアドレスを取得しようとします...コンテナ内の固定値(静的)に設定すると、コンテナはもう起動しませんでした!
ドミニクドーン14

ホストが一時停止および再開された場合、これはうまく機能しないことに注意してください。lxcは割り当てられたIPアドレスを続行しますが、ホストはもうIPアドレスを持たないと考えます。lxc-net用にdnsmasqを設定し、そこに固定アドレスを配布する方が良いことがわかりました。
HRJ 14

@HRJ-コメントや参照へのリンクには、「やる」と言うだけでなく、「方法」を含めるべきです。これは技術的なサイトであり、実際に使用可能なものを言う必要があります。
イアンMacintosh

2
あなたの範囲(LXC_DHCP_RANGEを参照)、dnsmasqのドキュメントやmanページあたりのよう/etc/dnsmasq.d-available/lxcに設定できる場所にある/ etc / default / LXCの両方が、それは、これを行うには、正しい場所のように思えるです
イアン・マッキントッシュ


4

ブリッジしているため、ホストではなくコンテナのみに IPアドレスを設定する必要があります。ホストは、独自の IPアドレスのみを持つ必要があります。


2

先日、Ubuntu 14.04でやったばかりです。それは単純だ。/etc/network/interfacesコンテナ内のファイルを編集して、これを設定するだけです。

auto eth0
iface eth0 inet static
 address $IP
 netmask $NETMASK
 gateway $GW
 dns-nameservers $DNS

すべての変数を目的の値に置き換えます。

あなたはしないでください他の何かをしなければなりません!

PS:いくつかの行の前のスペースに注意してください。それが必須です。


これにより、私のコンテナはもう起動しなくなりました(ubuntu 14.04サーバー)。
ドミニクドーン14

2

私が見つけた最も速い方法は、lxcプロファイルを使用することです

lxc profile list -あなたが持っているすべてのプロファイルをリストするコマンド

lxc profile copy default minecraft(これは新しいプロファイルの名前です)

それから lxc profile edit minecraft

これが出てきます

devices:
  eth0:
    ipv4.address: 192.168.1.114/24  - add this line and enter any ip address you like
    name: eth0
    nictype: macvlan - this is my setting
    parent: enp0s25
    type: nic
  root:
    path: /
    pool: lxc_zfs
    type: disk
name: mine
used_by:

それを保存します

次に、このようにLXCコンテナにプロファイルを割り当てます

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

コンテナを再起動すると、新しいIPアドレスがそのコンテナに設定されます


1

@Enrique Moreno Tentの回答に従ってlxcコンテナを正しくセットアップできたので、他のアイテムのセットアップ方法がわからない場合の対処方法を詳しく説明します。

1. lxc-attachコマンドを使用してLXCコンテナーにアクセスします

コマンド:

$ lxc-attach -n YOUR-CONTAINER-NAME

2.現在の構成を表示する ifconfig

コマンド

root@mycontainer:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.160  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::216:3eff:fec9:2fa0  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:c9:2f:a0  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 7142 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9788 (9.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 20285  bytes 175021803 (175.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20285  bytes 175021803 (175.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

`` `

3.アドレス、ネットマスク、ゲートウェイの取得

ifconfig上記のコマンドの結果を見ると、次のことがわかります。

アドレスは希望するアドレスです。10.0.3.166に変更できます。

ネットマスクがあります:255.255.255.0

ゲートウェイブロードキャストアドレスを使用するゲートウェイの場合は、ここで10.0.3.255です

上記を見るとわかるように、現在、ゲスト(コンテナ)を満たすために必要なすべての情報を持っています/etc/network/interfaces

4. dns-nameservers価値の獲得。

次のコマンドを発行します。

cat /etc/resolv.conf

ただし、Google DNSを使用することをお勧め8.8.8.8します。8.8.4.4

5. /etc/network/interfacesコンテナ内での編集

auto eth0 iface eth0 inet static address 10.0.3.166 netmask 255.255.255.0 gateway 10.0.3.255 dns-nameservers 8.8.8.8


ifconfigip aより新しいdebian / ubuntuバージョンlinuxconfig.org/で
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.