현재 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
몇 가지 생각/질문:
- 브리지에 IP를 할당할 수는 없으며 브리지에 있는 하나 이상의 인터페이스에 할당합니다.
- 같은 이유로
bridge
인터페이스를 필터링할 수 없습니다. - 4개의 인터페이스를 브리지하는 이유는 무엇입니까?
trunk
브리지 모드 대신 브로드캐스트 모드를 정말로 원하시나요 ? $wifi
인터페이스를 브리징하고 단일 IP 주소를 가지려는 경우 ( )에 대해em5
별도의 규칙을 생성할 필요가 없습니다 . 실제로 할당된 IP가 없으므로em5
이러한 규칙을 평가할 수 없습니다.
노력하다
- 삭제
vether
및bridge
- 릴레이
em1
-em5
브로드캐스트 모드( 참조man trunk
)그리고IP를 할당하세요. (당신이 가지고 있는 것과 같은vether
) - 적응
pf.conf
하고, - 들어 봐
dhcpd
.
Wi-Fi 클라이언트(및 AP)를 격리하려면 트렁킹하지 말고 em5
다른 서브넷의 IP 주소를 제공하고 이 서브넷에 대한 설정을 에 추가 dhcpd.conf
하고 unbound.conf
청취 dhcpd
하고 trunk0
조정 em5
하세요 pf.conf
. 이 경우 LAN( trunk0
)과 WLAN( ) em5
간의 트래픽을 허용하는 규칙을 추가해야 합니다.
고쳐 쓰다:
인터페이스를 트렁킹하는 대신에 전환하여 생성해 보십시오 vether
. vport
그런 다음 필터링으로 변경하고(대신!) 규칙을 삭제하십시오. 그럼 계속 들어보세요.veb
bridge
pf.conf
vport
veb
$wifi
dhcpd
unbound
vport