etc/network/interfaces를 통해 구성된 데비안 시스템, 현재 상황
브리지 "br0"에는 2개의 물리적 이더넷 인터페이스가 있습니다. eth0(WAN 측, ISP 모뎀/라우터에 연결됨) eth1(LAN 측, 물리적 스위치에 연결됨)
eth0과 eth1 사이의 트래픽은 IPtables 방화벽과 Suricata를 IPS로 통과합니다. 이 설정은 현재 잘 작동합니다.
이제 Linux 컨테이너를 통해 이 설정에 "pi-hole"을 추가하고 싶습니다. Linux 컨테이너에는 가상 이더넷 인터페이스를 추가하려면 가상 브리지가 필요합니다.
그래서 나는 다음을 달성하고 싶습니다 :
가상 브리지 "br0" - eth0 사용(WAN)
<-->
가상 브리지 "lanbr0"에 연결 - eth1(LAN) 사용 - veth0(LXC의 가상 이더넷 인터페이스) 사용
이렇게 하면 나중에 필요할 경우 "lanbr0" 브리지에 더 많은 인터페이스를 추가할 수 있습니다.
편집하다 다음 명령을 사용하여 이 작업을 수행할 수 있습니다. ip link add veth0 type veth Peer name veth1
그런 다음 veth0을 br0에 추가하고 veth1을 lanbr0에 추가하고 모든 인터페이스를 가져온 후 eth1을 br0에서 lanbr0으로 이동합니다.
하지만 /etc/network/interfaces를 통해 이 작업을 어떻게 수행합니까? (아래 표시된 대로 부팅 중에 로드되도록 합니까?)
답변1
가상 이중 인터페이스를 구체적으로 다루는 조항은 없습니다 type veth
. 그래서 일부 땜질은 주로 다음을 사용하여 수행되었습니다.pre-up
옵션. 여기에 veth0
및 를 유지했지만 다른 이름(예: 및 ) veth1
을 선택하는 것을 고려해야 합니다. 이는 제공되지 않은 경우(예: ) 기본적으로 선택되는 이름 이며 충돌할 수 있기 때문입니다.veth-br0
veth-lanbr0
ip link add type veth
veth
인터페이스 의 경우 :
iface veth0 inet manual
pre-up ip link add veth0 type veth peer name veth1 || :
hwaddress 02:00:00:01:00:00
iface veth1 inet manual
pre-up ip link add veth1 type veth peer name veth0 || :
hwaddress 02:00:00:01:00:01
이렇게 하면 두 인터페이스 중 하나를 시작할 때 두 인터페이스가 모두 활성화됩니다. || :
피어 인터페이스가 이미 "기타" 인터페이스에 의해 설정되어 있으므로 여기서는 실패하지 않습니다. 내부 상태 이유로 인해 ifup
둘 중 하나를 올리면 다른 하나가 나타나더라도 결국에는 둘 다 발생해야 합니다. 이는 의도된 용도에 따라 선택 사항일 수 hwaddress
있으며 어쨌든 다른 올바른 값으로 설정될 수 있습니다. 브리지는 첫 번째 슬레이브 인터페이스의 MAC 주소를 얻습니다.
이제 교량에서 사용해보세요. 모든 설정을 제공하지는 않습니다(실제로 제공하지 않았기 때문에). veth
관련 부분만 제공합니다. 내가 추측할 수 없는 것과 내가 일부 XXXX
를 어디에 두었는지 조정해야 할 것입니다 ...
.inet XXXX
inet manual
inet static
inet dhcp
auto br0
iface br0 inet XXXX
pre-up ifup veth0
bridge_ports eth0 veth0
...
auto lanbr0
iface lanbr0 inet XXXX
pre-up ifup veth1
bridge_ports veth1 eth1
address xx.xx.xx.xx
netmask 255.255.255.0
...
참고 ifup vethX
내부에 명령을 추가했습니다. 그렇지 않으면 인터페이스가 존재하지 않는다고 불평하고 이 인터페이스 없이 브리지를 시작하여 완료된 것으로 간주합니다. 이미 논리적(상태를 의미)인 인터페이스를 호출하는 것은 오류가 아니기 || :
때문에 여기서는 사용할 필요가 없습니다 .ifupdown
누락된 부분을 완성한 후 해당 부분을 별도의 구성 파일 /etc/network/interfaces.d
(또는 구성 파일 아님 /etc/network/interfaces
)에 넣으면 작동합니다.
처음에 작동하지 않으면 모든 인터페이스를 논리적으로 종료하고(논리적으로는 를 사용함을 의미함 ifdown
) 다시 시도하십시오. 이는 잘못된 논리적 상태로 인해 일부 인터페이스가 올바르게 (재)구성되지 않기 때문입니다.
또한 NetworkManager와 같은 다른 네트워크 관리자와 상호 작용할 수도 있습니다. 특정 인터페이스를 무시하도록 허용하는 옵션이 있을 수 있지만 이는 이 답변의 범위를 벗어납니다.
답변2
참고로 다음은 전체 인터페이스 스크립트입니다(일부 주소에는 xx가 추가됨).
# The loopback network interface
auto lo
iface lo inet loopback
# IPv4 address
auto enp8s0
iface enp8s0 inet manual
offload-gro off
offload-lro off
auto enp0s31f6
iface enp0s31f6 inet manual
iface veth0 inet manual
pre-up ip link add veth0 type veth peer name veth1 || :
hwaddress 02:00:00:01:00:00
iface veth1 inet manual
pre-up ip link add veth1 type veth peer name veth0 || :
hwaddress 02:00:00:01:00:01
# Bridge setup
auto br0
iface br0 inet static
pre-up ifup veth0
bridge_ports enp8s0 veth0
bridge_fd 0
bridge_maxwait 0
address 192.168.xx.xx
broadcast 192.168.xx.xx
network 192.168.xx.xx
netmask 255.255.255.0
gateway 192.168.xx.xx
dns-nameservers xx.xx.xx.xx xx.xx.xx.xx
auto lanbr0
iface lanbr0 inet manual
pre-up ifup veth1
bridge_ports veth1 enp0s31f6
다시 한 번 감사드립니다 AB