![Bridge + dnsmasq 访客网络](https://linux22.com/image/684555/Bridge%20%2B%20dnsmasq%20%E8%AE%BF%E5%AE%A2%E7%BD%91%E7%BB%9C.png)
我有一个 Ubuntu 16.04 服务器和默认 LXD 配置。
通常,当图像出现时,会发生以下情况:
eno1 Link encap:Ethernet HWaddr b8:ae:ed:ea:69:41
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::baae:edff:feea:6941/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:116948 errors:0 dropped:3 overruns:0 frame:0
TX packets:59726 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:161031770 (161.0 MB) TX bytes:4656462 (4.6 MB)
Interrupt:16 Memory:df100000-df120000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:177 errors:0 dropped:0 overruns:0 frame:0
TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:13388 (13.3 KB) TX bytes:13388 (13.3 KB)
lxdbr0 Link encap:Ethernet HWaddr fe:5c:57:cd:bd:72
inet addr:10.41.63.1 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fd6d:c772:b128:ebfd::1/64 Scope:Global
inet6 addr: fe80::d08c:f9ff:fed9:5cd1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:39 errors:0 dropped:0 overruns:0 frame:0
TX packets:78 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5064 (5.0 KB) TX bytes:11128 (11.1 KB)
vethD7L5U9 Link encap:Ethernet HWaddr fe:5c:57:cd:bd:72
inet6 addr: fe80::fc5c:57ff:fecd:bd72/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:39 errors:0 dropped:0 overruns:0 frame:0
TX packets:75 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5610 (5.6 KB) TX bytes:10322 (10.3 KB)
图像如下所示:
+-------+---------+---------------------+-----------------------------------------------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------+---------+---------------------+-----------------------------------------------+------------+-----------+
| first | RUNNING | 10.41.63.206 (eth0) | fd6d:c772:b128:ebfd:216:3eff:fe9d:ef41 (eth0) | PERSISTENT | 0 |
+-------+---------+---------------------+-----------------------------------------------+------------+-----------+
我想选择使用自己的桥接器,因为这是重新配置的一个选项。看来它并不像我想象的那么简单。
我创建了一座简单的桥梁。
iface vbr0 inet static
address 10.10.10.1
broadcast 255.255.255.0
pre-up brctl addbr vbr0
post-down brctl delbr vbr0
我重新启动了容器但没有获取 IP。
+-------+---------+------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------+---------+------+------+------------+-----------+
| first | RUNNING | | | PERSISTENT | 0 |
+-------+---------+------+------+------------+-----------+
但确实让 veth 出现。
vbr0 Link encap:Ethernet HWaddr fe:da:17:ca:ab:e0
inet addr:10.10.10.1 Bcast:255.255.255.0 Mask:255.0.0.0
inet6 addr: fe80::e83b:1aff:fe18:4652/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7632 (7.6 KB) TX bytes:908 (908.0 B)
vethWLPBCC Link encap:Ethernet HWaddr fe:da:17:ca:ab:e0
inet6 addr: fe80::fcda:17ff:feca:abe0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4410 (4.4 KB) TX bytes:948 (948.0 B)
没有运行 dnsmasq(这是意料之中的),所以我不确定它在哪里发挥作用。如果我手动运行它,我的容器会获得 IP 地址(重启后)。
有人可以指点如何复制 lxdbr0 桥和随之而来的 dnsmasq 实例吗?
答案1
Bridge + dnsmasq 访客网络
看起来您缺少了 LXC/LXD 通常为您处理的两个步骤。使用 LXC,这由服务处理lxc-net
。
从根本上来说,事情是这样的:
- 桥梁已建成
- 启动一个
dnsmasq
实例,监听桥接接口 iptables
添加规则以提供 NAT、DHCP 和基本 ICMP 流量。
如果您查看lxc-net
初始化脚本的源代码,就会看到这种确切的行为。(可能还是lxd
一样的)
部署
您可以:
- 从 lxc / 你的发行版复制并修改 lxc-net 脚本(查看
/etc/init/lxc-net
或访问此处:lxc-net (官方主站)。- 将其放入您的初始化脚本 (
/etc/init/
) 中并为其指定一个独特的名称。然后您可以像启动/停止它一样启动/停止它,就像它是自己的服务一样。
- 将其放入您的初始化脚本 (
- 根据现有脚本编写您自己的脚本。
您需要添加此脚本来代替pre-up
/post-down
命令。确保它被标记为可执行。