OpenBSD의 이더넷 인터페이스 및 기타 문제 브리징

OpenBSD의 이더넷 인터페이스 및 기타 문제 브리징

현재 OpenBSD 방화벽, 라우터 및 DNS 서버를 설정 중입니다. 저는 대부분의 구성이 OpenBSD 사이트에서 제공되고 pf 구성은 다른 가이드에서 채택되는 등 다양한 온라인 가이드를 따라왔습니다.

주요 링크는 다음과 같습니다.

브리지 설정 -https://www.openbsd.org/faq/faq6.html

PF 설정 —https://www.openbsd.org/faq/pf/example1.html,https://openbsdrouterguide.net

이것을 시도할 때 해결 방법을 잘 모르는 두 가지 주요 문제가 있습니다. 첫 번째 문제는 OpenBSD 가이드에 설명된 브리지가 제대로 작동하지 않는다는 것입니다(인터페이스에 IP가 없음). WAN 포트는 ISP로부터 성공적으로 IP를 얻었고 1.1.1.1 및 openbsd.org 및 google.com과 같은 사이트에 ping을 보낼 수 있습니다. 그러나 시스템 유지 관리를 위해 fw_update 또는 pkg_add를 수행하려고 하면 호스트에 대한 경로가 없다는 오류 메시지가 나타납니다.

구문 오류가 있고 브리지에 IP를 할당할 수 없기 때문에 내 pf.conf가 올바르게 로드되지 않습니다. pf.conf를 확인했지만 구문 오류가 있는 위치를 찾을 수 없습니다.

이것은 내 pf.conf입니다.

# MACROS
pubif = "em0"
bridge = "bridge0"
wifi = "em5"

# TABLES
table <martians> {0.0.0.0/8 10.0.0.0/8 100.64.0.0/10 127.0.0.0/8 169.254.0.0/16 172.16.0.0/12 192.0.0.0/24 192.0.0.0/29 192.0.2.0/24 192.88.99.0/24 192.168.0.0/16 198.18.0.0/15 198.51.100.0/24 203.0.113.0/24 240.0.0.0/4 255.255.255.255/32}

# RULES
set skip on lo0

# Spoofs
block in from no-route
block in quick from urpf-failed

# Block Non-routes
block in quick on $pubif from <martians> to any
block return out quick on $pubif from any to <martians>

# Default Block
block return in on {$bridge $wifi}
block return in on ! lo0 proto tcp to port 6000:6010
block return out log proto {tcp udp} user _pbuild
block drop in log on $pubif

# Allow ICMP
match in on $pubif inet proto icmp icmp-type {echoreq} tag ICMP_IN
block drop in on $pubif proto icmp
pass in proto icmp tagged ICMP_IN max-pkt-rate 100/10

# Router to Internet
pass out inet from $pubif

# Interfaces to Internet
pass in on {$bridge $wifi}

# Block DNS not originating from server
block return in quick on $bridge proto {udp tcp} to ! $bridge port {53 853}
block return in quick on $wifi proto {udp tcp} to ! $wifi port {53 853}

# Allow LAN
pass out on {$bridge $wifi} inet keep state

# NAT Rules
pass out on $pubif inet from $bridge:network to any nat-to ($pubif)
pass out on $pubif inet from $wifi:network to any nat-to ($pubif)

이것은 내 unbound.conf입니다.

server:
    interface: 127.0.0.1
    interface: 10.0.0.1
    interface: 10.0.1.1

    access-control: 0.0.0.0/0 refuse
    access-control: ::0/0 refuse
    access-control: 127.0.0.0/8 allow
    access-control: ::1 allow
    access-control: 10.0.0.0/24 allow
    access-control: 10.0.1.0/24 allow

    hide-identity: yes

    hide-version: yes

    prefetch: yes

    private-address: 10.0.0.0/16

    auto-trust-anchor-file: "/var/unbound/db/root.key"
    root-hints: "/var/unbound/db/root.hints"

    cache-min-ttl: 3600
    serve-expired: yes

remote-control:
    control-enable: yes
    control-interface: /var/run/unbound.sock

이것은 내 dhcpd입니다.

subnet 10.0.0.0 netmask 255.255.255.0 {
    option domain-name-servers 10.0.0.1;
    option routers 10.0.0.1;
    range 10.0.0.32 10.0.0.254;
}
subnet 10.0.1.0 netmask 255.255.255.0 {
    option domain-name-servers 10.0.1.1;
    option routers 10.0.1.1;
    range 10.0.1.32 10.0.1.254;
}

마이베더0inet 10.0.0.1 255.255.255.0 10.0.0.255

내 다리 0

add vether0
add em1
add em2
add em3
add em4
up

브리지 인터페이스는 호스트 이름에 간단히 표시됩니다. if 및 em5는 액세스 포인트에 연결하고 자체 IP로 태그를 지정하여 나머지 네트워크(10.0.1.1)와 분리합니다.

rc.conf.local에는 다음 줄이 있습니다.

dhcpd_flags=vether0
unbound_flags=
unbound_timeout=240

이 시점에서는 내가 뭘 잘못하고 있는지 잘 모르겠습니다. 나는 모든 지시를 따른 것 같은 느낌이 든다. 제가 가장 확신하지 못하는 부분은 vether0과 bridge0입니다. 어쩌면 내가 제대로 하고 있지 않은 건 아닐까? 누구든지 내 오류를 본다면 오류를 수정할 수 있도록 안내해 주시면 매우 감사하겠습니다.

감사해요

편집하다:

ifconfig -a:

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 32768
    index 8 priority 0 llprio 3
    groups: lo
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8
    inet 127.0.0.1 netmask 0xff000000
em0: flags=808843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,AUTOCONF4> mtu 1500
    lladdr 00:e0:67:2b:a9:ec
    index 1 priority 0 llprio 3
    media: Ethernet autoselect (none)
    status: no carrier
em1: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
    lladdr 00:e0:67:2b:a9:ed
    index 2 priority 0 llprio 3
    media: Ethernet autoselect (none)
    status: no carrier
em2: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
    lladdr 00:e0:67:2b:a9:ee
    index 3 priority 0 llprio 3
    media: Ethernet autoselect (none)
    status: no carrier
em3: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
    lladdr 00:e0:67:2b:a9:ef
    index 4 priority 0 llprio 3
    media: Ethernet autoselect (none)
    status: no carrier
em4: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
    lladdr 00:e0:67:2b:a9:f0
    index 5 priority 0 llprio 3
    media: Ethernet autoselect (none)
    status: no carrier
em5: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    lladdr 00:e0:67:2b:a9:f1
    index 6 priority 0 llprio 3
    media: Ethernet autoselect (none)
    status: no carrier
    inet 10.0.1.1 netmask 0xffffff00 broadcast 10.0.1.255
enc0: flags=0<>
    index 7 priority 0 llprio 3
    groups: enc
    status: active
bridge0: flags=41<UP,RUNNING> mtu 1500
    index 9 llprio 3
    groups: bridge
    priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp
    em4 flags=3<LEARNING,DISCOVER>
        port 5 ifpriority 0 ifcost 0
    em3 flags=3<LEARNING,DISCOVER>
        port 4 ifpriority 0 ifcost 0
    em2 flags=3<LEARNING,DISCOVER>
        port 3 ifpriority 0 ifcost 0
    em1 flags=3<LEARNING,DISCOVER>
        port 2 ifpriority 0 ifcost 0
    vether0 flags=3<LEARNING,DISCOVER>
        port 10 ifpriority 0 ifcost 0
vether0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    lladdr fe:e1:ba:d0:86:5a
    index 10 priority 0 llprio 3
    groups: vether
    media: Ethernet autoselect
    status: active
    inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33136
    index 11 priority 0 llprio 3
    groups: pflog

pfctl -nf /etc/pf.conf:

no IP address found for em0
/etc/pf.conf:33: could not parse host specification
no IP address found for bridge0
/etc/pf.conf:39: could not parse host specification
no IP address found for bridge0:network
/etc/pf.conf:49: could not parse host specification

답변1

몇 가지 생각/질문:

  1. 브리지에 IP를 할당할 수는 없으며 브리지에 있는 하나 이상의 인터페이스에 할당합니다.
  2. 같은 이유로 bridge인터페이스를 필터링할 수 없습니다.
  3. 4개의 인터페이스를 브리지하는 이유는 무엇입니까? trunk브리지 모드 대신 브로드캐스트 모드를 정말로 원하시나요 ?
  4. $wifi인터페이스를 브리징하고 단일 IP 주소를 가지려는 경우 ( )에 대해 em5별도의 규칙을 생성할 필요가 없습니다 . 실제로 할당된 IP가 없으므로 em5이러한 규칙을 평가할 수 없습니다.

노력하다

  1. 삭제 vetherbridge
  2. 릴레이 em1- em5브로드캐스트 모드( 참조 man trunk)그리고IP를 할당하세요. (당신이 가지고 있는 것과 같은 vether)
  3. 적응 pf.conf하고,
  4. 들어 봐 dhcpd.

Wi-Fi 클라이언트(및 AP)를 격리하려면 트렁킹하지 말고 em5다른 서브넷의 IP 주소를 제공하고 이 서브넷에 대한 설정을 에 추가 dhcpd.conf하고 unbound.conf청취 dhcpd하고 trunk0조정 em5하세요 pf.conf. 이 경우 LAN( trunk0)과 WLAN( ) em5간의 트래픽을 허용하는 규칙을 추가해야 합니다.

고쳐 쓰다:

인터페이스를 트렁킹하는 대신에 전환하여 생성해 보십시오 vether. vport그런 다음 필터링으로 변경하고(대신!) 규칙을 삭제하십시오. 그럼 계속 들어보세요.vebbridgepf.confvportveb$wifidhcpdunboundvport

관련 정보