类型:proxy

注意

proxy 设备类型支持容器(NAT 和非 NAT 模式)和虚拟机(仅 NAT 模式)。它支持容器和虚拟机的热插拔。

代理设备允许在主机和实例之间转发网络连接。这种方法可以将到达主机地址之一的流量转发到实例内部的地址,或者反过来,让实例中的地址通过主机连接。

NAT 模式中,代理设备可用于 TCP 和 UDP 代理。在非 NAT 模式下,您还可以代理 Unix 套接字之间的流量(这对于例如将图形 GUI 或音频流量从容器转发到主机系统非常有用),甚至跨协议(例如,您可以在主机系统上有一个 TCP 监听器,并将它的流量转发到容器内部的 Unix 套接字)。

支持的连接类型为

  • tcp <-> tcp

  • udp <-> udp

  • unix <-> unix

  • tcp <-> unix

  • unix <-> tcp

  • udp <-> tcp

  • tcp <-> udp

  • udp <-> unix

  • unix <-> udp

要添加一个proxy 设备,请使用以下命令

incus config device add <instance_name> <device_name> proxy listen=<type>:<addr>:<port>[-<port>][,<port>] connect=<type>:<addr>:<port> bind=<host/instance>

NAT 模式

代理设备还支持 NAT 模式(nat=true),其中数据包使用 NAT 转发,而不是通过单独的连接代理。此模式的优点是客户端地址保持不变,而无需目标目的地支持 HAProxy PROXY 协议(这是在非 NAT 模式下使用代理设备时通过客户端地址的唯一方法)。

但是,仅当实例运行所在的主机是网关时才支持 NAT 模式(例如,如果您使用的是incusbr0)。

在 NAT 模式下,支持的连接类型为

  • tcp <-> tcp

  • udp <-> udp

在使用nat=true配置代理设备时,您必须确保目标实例在其 NIC 设备上配置了静态 IP。

指定 IP 地址

使用以下命令为实例 NIC 配置静态 IP

incus config device set <instance_name> <nic_name> ipv4.address=<ipv4_address> ipv6.address=<ipv6_address>

要定义静态 IPv6 地址,父级托管网络必须启用ipv6.dhcp.stateful

在定义 IPv6 地址时,请使用方括号表示法,例如

connect=tcp:[2001:db8::1]:80

您可以通过将连接 IP 设置为通配符地址(IPv4 为0.0.0.0,IPv6 为[::])来指定连接地址应为实例的 IP。

注意

在使用非 NAT 模式时,监听地址也可以使用通配符地址。但是,在使用 NAT 模式时,您必须在 Incus 主机上指定一个 IP 地址。

设备选项

proxy 设备具有以下设备选项

类型

默认

必需

描述

bind

字符串

主机

绑定哪一方(host/instance

connect

字符串

-

要连接到的地址和端口(<type>:<addr>:<port>[-<port>][,<port>]

gid

整数

0

监听 Unix 套接字所有者的 GID

listen

字符串

-

要绑定和监听的地址和端口(<type>:<addr>:<port>[-<port>][,<port>]

mode

整数

0644

监听 Unix 套接字的模式

nat

布尔

false

是否通过 NAT 优化代理(要求实例 NIC 具有静态 IP 地址)

proxy_protocol

布尔

false

是否使用 HAProxy PROXY 协议传输发送者信息

security.gid

整数

0

要降级到的 GID

security.uid

整数

0

要降级到的 UID

uid

整数

0

监听 Unix 套接字的所有者的 UID