Dlouho jsem si lámal hlavu, jak nastavit OpenBSD firewall místo firewallu na VDLS modemu a rozběhnout IPv6. Nakonec se to podařilo.
Problém programátorů VDSL modemů je v tom, že vůbec neumožňují na IPv6 spojení dovnitř naší sítě. Například modem Comtrend VR-3026e v2 přidělí IPv6 prefix na svoje LAN rozhraní, ale spojení zvenku dovnitř nejde. U modemu ZTE ZXHN-H267A to funguje. Firewally uvnitř těchto modemů jsou mizerné, občas nejde nastavit něco, co člověk potřebuje. Dále je problém s aktualizacemi modemů. Výrobci na to kašlou. Proto jsem se rozhodl, že firewall bude na malém PC s dvěma síťovkami a operační systém bude OpenBSD, známý svou bezpečností.
Dalším problémem, který jsem musel vyřešit, je ten, že už IPv6 mám od jiného poskytovatele. Budu muset nastavit překlad IPv6 prefixů.
První věc, kterou jsem musel udělat je nastavit modem do režimu bridge. To se dělá pomocí webového rozhraní k modemu. Používám oblíbený modem ZTE ZXHN-H267A. OpenBSD router je ve verzi 7.5.
Dále musím udělat:
-
Nakonfigurovat WAN rozhraní přes PPPoE
-
Nakonfigurovat IPv6 DHCP delegaci prefixu (IPv6 PD) na LAN rozhraní
-
Nastavit Router Advertisement Daemon (RAD) aby propagoval prefixy počítačům v interní síti LAN

Zelený kabel je spojka modem router, šedivý kabel je LAN síť.
Konfigurace na rtr8
inet autoconf
up mtu 1500
inet 0.0.0.0 255.255.255.255 NONE mtu 1492 pppoedev re1 authproto pap authname 'vdsl' authkey 'vdsl' up (1)
dest 0.0.0.1
inet6 eui64
!/sbin/route add -mpath default -ifp pppoe0 0.0.0.1
!/sbin/route add -inet6 default -ifp pppoe0 fe80::%pppoe0
inet6 autoconf
| 1 | Jako authname a authkey můžeme použít i O2 a O2 pokud se připojujeme k poskytovateli O2 a nebo funguje i cetin a cetin, což by mělo být universální. |
OpenBSD poskytuje IPv6 konektivitu přes SLAAC v základním systému, ale nemá v základu DHCPv6 klienta, který by rozuměl delagaci prefixů. V balících je dhcpcd klient od ISC, který to zvládne.
# pkg_add dhcpcd
# rcctl enable dhcpcd
# rcctl start dhcpcd
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.
# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel
# Inform the DHCP server of our hostname for DDNS.
#hostname
# Use the hardware address of the interface for the Client ID.
#clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
duid
# Persist interface configuration when dhcpcd exits.
persistent
# vendorclassid is set to blank to avoid sending the default of
# dhcpcd-<version>:<os>:<machine>:<platform>
vendorclassid
# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search
option classless_static_routes
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu
# Request a hostname from the network
option host_name
# Most distributions have NTP support.
#option ntp_servers
# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit
# A ServerID is required by RFC2131.
require dhcp_server_identifier
# Generate SLAAC address using the Hardware Address of the interface
#slaac hwaddr
# OR generate Stable Private IPv6 Addresses based from the DUID
slaac private
## Pro IPv6
waitip 6
ipv6only
noipv6rs
allowinterfaces pppoe0 re0
interface pppoe0
ipv6rs
iaid 1
ia_pd 2 re0/0/64
interface re0 (1)
| 1 | DNS propagaci mi zatím dělá RAD na routeru dizzy, proto je to tady tak jednoduché. |
Start dhcpcd klienta je v logu zobrazen takto
Apr 17 00:54:32 rtr8 rad[51049]: startup
Apr 17 00:54:33 rtr8 dhcpcd[15485]: dhcpcd-10.0.6 starting
Apr 17 00:54:33 rtr8 dhcpcd[68102]: DUID 00:01:00:01:2d:b1:b1:36:e0:d5:5e:a2:b7:c8
Apr 17 00:54:33 rtr8 dhcpcd[68102]: re0: IAID 5e:a2:b7:c8
Apr 17 00:54:33 rtr8 dhcpcd[68102]: pppoe0: IAID 00:00:00:01
Apr 17 00:54:33 rtr8 dhcpcd[68102]: pppoe0: IA type 25 IAID 00:00:00:02
Apr 17 00:54:33 rtr8 dhcpcd[68102]: pppoe0: rebinding prior DHCPv6 lease
Apr 17 00:54:34 rtr8 dhcpcd[68102]: pppoe0: soliciting an IPv6 router
Apr 17 00:54:36 rtr8 dhcpcd[68102]: pppoe0: REPLY6 received from fe80::427c:7dff:fe93:1231
Apr 17 00:54:36 rtr8 dhcpcd[68102]: pppoe0: 2a00:11b7:301a:4100::/56: no valid lifetime
Apr 17 00:54:36 rtr8 dhcpcd[68102]: pppoe0: renew in 1800, rebind in 2880, expire in 0 seconds
Apr 17 00:54:36 rtr8 dhcpcd[68102]: pppoe0: DHCPv6 lease expired
Apr 17 00:54:37 rtr8 resolvd[47907]: rebuilding: file trunc/write
Apr 17 00:54:38 rtr8 dhcpcd[68102]: pppoe0: ADV 2a00:11b7:301a:4100::/56 from fe80::427c:7dff:fe93:1231
Apr 17 00:54:38 rtr8 dhcpcd[68102]: pppoe0: REPLY6 received from fe80::427c:7dff:fe93:1231
Apr 17 00:54:38 rtr8 dhcpcd[68102]: pppoe0: renew in 1800, rebind in 2880, expire in 86400 seconds
Apr 17 00:54:38 rtr8 dhcpcd[68102]: lo0: adding reject route to 2a00:11b7:301a:4100::/56 via ::1
Apr 17 00:54:38 rtr8 dhcpcd[68102]: pppoe0: delegated prefix 2a00:11b7:301a:4100::/56
Apr 17 00:54:38 rtr8 dhcpcd[68102]: re0: adding address 2a00:11b7:301a:4100::1/64
Apr 17 00:54:38 rtr8 dhcpcd[68102]: re0: adding route to 2a00:11b7:301a:4100::/64
Apr 17 00:54:38 rtr8 dhcpcd[68102]: pppoe0: Router Advertisement from fe80::427c:7dff:fe93:1231
Apr 17 00:54:38 rtr8 dhcpcd[68102]: pppoe0: adding default route via fe80::427c:7dff:fe93:1231
# $OpenBSD: pf.conf,v 1.55 2017/12/03 20:40:04 sthen Exp $
#
# See pf.conf(5) and /etc/examples/pf.conf
if0="re0" ## dizzy
if1="pppoe0" ## vdsl
edera_prefix="2a0e:5340:4:1::/64"
vdsl_prefix="2a00:11b7:301a:4100::/64"
#gw1="2a00:11b7:301a:4100:0:0:0:1"
set skip on lo
match out on $if1 inet nat-to ($if1:0)
block return # block stateless traffic
pass # establish keep-state
match out on $if1 inet6 from $edera_prefix to any nat-to $vdsl_prefix bitmask (1)
pass in quick on $if0 proto tcp from any to ($if0) port ssh flags S/SA keep state
#pass in quick on $if1 inet6 proto tcp from any to ($if1) port ssh flags S/SA keep state reply-to $gw1
pass in on $if0 inet6 proto icmp6
pass in on $if1 inet6 proto icmp6
# By default, do not permit remote connections to X11
block return in on ! lo0 proto tcp to port 6000:6010
# Port build user does not need network
block return out log proto {tcp udp} user _pbuild
| 1 | Překlad zdrojové adresy z prefixu 2a0e:5340:4:1::/64 na 2a00:11b7:301a:4100::/64. Podobné pravidlo match out on $ext_if1 inet6 from $vdsl_prefix to any nat-to $edera_prefix bitmask je na druhém routeru.
Je to kvůli tomu, že poskytovatelé obvykle blokují prefixy, které nepřidělili. V případě výpadku jednoho z routerů bude vnitřní síť fungovat. Kdo má jenom jedno připojení k Internetu, toto pravidlo nepotřebuje. |
rtr8# ifconfig
lo0: flags=2008049<UP,LOOPBACK,RUNNING,MULTICAST,LRO> mtu 32768
index 4 priority 0 llprio 3
groups: lo
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000
re0: flags=808843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,AUTOCONF4> mtu 1500
lladdr e0:d5:5e:a2:b7:c8
index 1 priority 0 llprio 3
groups: egress
media: Ethernet autoselect (1000baseT full-duplex,rxpause,txpause)
status: active
inet 192.168.120.189 netmask 0xffffff00 broadcast 192.168.120.255
inet6 fe80::e2d5:5eff:fea2:b7c8%re0 prefixlen 64 scopeid 0x1
inet6 2a00:11b7:301a:4100::1 prefixlen 64 pltime 3292 vltime 86092
re1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr e0:d5:5e:a2:b7:ca
index 2 priority 0 llprio 3
media: Ethernet autoselect (1000baseT full-duplex,rxpause,txpause)
status: active
enc0: flags=0<>
index 3 priority 0 llprio 3
groups: enc
status: active
pppoe0: flags=48851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST,AUTOCONF6TEMP> mtu 1492
index 5 priority 0 llprio 3
dev: re1 state: session
sid: 0x1 PADI retries: 1 PADR retries: 0 time: 20:35:28
sppp: phase network authproto pap authname "vdsl"
dns: 31.30.90.11 31.30.90.12
groups: pppoe egress
status: active
inet6 fe80::e2d5:5eff:fea2:b7c8%pppoe0 --> prefixlen 64 scopeid 0x5
inet 100.64.124.74 --> 10.26.202.187 netmask 0xffffffff
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33136
index 6 priority 0 llprio 3
groups: pflog
rtr8#
jirka@jirka-Precision-T3610:~/vyuka_sspvc$ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether f8:b1:56:d3:a6:48 brd ff:ff:ff:ff:ff:ff
inet 192.168.120.216/24 brd 192.168.120.255 scope global dynamic noprefixroute enp0s25
valid_lft 3567sec preferred_lft 3567sec
inet6 2a0e:5340:4:1:5098:16d9:21d1:3bad/64 scope global temporary dynamic
valid_lft 5155sec preferred_lft 2455sec
inet6 2a0e:5340:4:1:13d4:4fc4:f816:5a2/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 5155sec preferred_lft 2455sec
inet6 2a00:11b7:301a:4100:5098:16d9:21d1:3bad/64 scope global temporary dynamic
valid_lft 5324sec preferred_lft 2624sec
inet6 2a00:11b7:301a:4100:be23:a460:c0e4:3442/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 5324sec preferred_lft 2624sec
inet6 fe80::acf4:e207:24d4:f502/64 scope link noprefixroute
valid_lft forever preferred_lft forever
jirka@jirka-Precision-T3610:~/vyuka_sspvc$
rtr8# traceroute6 -I sspvc.lixis.cz
traceroute6 to sspvc.lixis.cz (2a0e:5340:4:400::4), 64 hops max, 60 byte packets
1 * * *
2 * * *
3 2a00:11b0:f000:ac00::1 (2a00:11b0:f000:ac00::1) 9.882 ms 9.551 ms 9.963 ms
4 2a00:11b0:2:106::2 (2a00:11b0:2:106::2) 9.975 ms 9.944 ms 9.763 ms
5 2a00:11b0:2:106::1 (2a00:11b0:2:106::1) 9.711 ms 9.711 ms 9.713 ms
6 ae10-0.prg10.core-backbone.com (2a01:4a0:1338:13a::1) 10.219 ms 10.487 ms 9.952 ms
7 2a01:4a0:1338:79::2 (2a01:4a0:1338:79::2) 10.012 ms 9.704 ms 9.738 ms
8 2a01:28:c:42::2 (2a01:28:c:42::2) 10.478 ms 10.212 ms 10.239 ms
9 2a03:f280:1::12 (2a03:f280:1::12) 12.733 ms 12.741 ms 12.485 ms
10 2a0e:5340:1::16 (2a0e:5340:1::16) 12.725 ms 12.967 ms 12.747 ms
11 * * *
12 sspvc.lixis.cz (2a0e:5340:4:400::4) 13.366 ms 13.458 ms 13.455 ms
rtr8#
dizzy# traceroute6 -I sspvc.lixis.cz
traceroute6 to sspvc.lixis.cz (2a0e:5340:4:400::4), 64 hops max, 60 byte packets
1 2a0e:5340:1:8000::1 (2a0e:5340:1:8000::1) 0.981 ms 0.866 ms 0.791 ms
2 * * *
3 2a0e:5340:1::16 (2a0e:5340:1::16) 3.496 ms 1.785 ms 1.755 ms
4 * * *
5 sspvc.lixis.cz (2a0e:5340:4:400::4) 2.166 ms 2.112 ms 1.934 ms
dizzy#
jirka@jirka-Precision-T3610:~/vyuka_sspvc$ traceroute ipv6.google.com
traceroute to ipv6.google.com (2a00:1450:4014:80e::200e), 30 hops max, 80 byte packets
1 2a00:11b7:301a:4100::2 (2a00:11b7:301a:4100::2) 0.328 ms 0.268 ms 0.453 ms
2 2a0e:5340:1:8000::59 (2a0e:5340:1:8000::59) 2.773 ms 2.737 ms 2.705 ms
3 zone0.man.i2.cz (2a0e:5340:1::1) 3.444 ms 3.597 ms 3.564 ms
4 2a03:f280:1::11 (2a03:f280:1::11) 11.258 ms 11.200 ms 11.164 ms
5 2a01:28:c:42::1 (2a01:28:c:42::1) 6.966 ms 6.931 ms 7.082 ms
6 ae12-401.prg10.core-backbone.com (2a01:4a0:1338:79::1) 7.048 ms 6.597 ms 6.542 ms
7 ae3-2054.vie10.core-backbone.com (2a01:4a0:0:2054::10) 10.900 ms 9.390 ms 9.337 ms
8 ae4-2028.muc20.core-backbone.com (2a01:4a0:0:2028::7) 15.127 ms 14.880 ms 14.846 ms
9 2001:4860:1:1::2784 (2001:4860:1:1::2784) 16.380 ms 16.275 ms 2001:4860:1:1::1a70 (2001:4860:1:1::1a70) 15.030 ms
10 2001:4860:0:1::83e3 (2001:4860:0:1::83e3) 17.856 ms 2001:4860:0:1::83bd (2001:4860:0:1::83bd) 16.813 ms 2001:4860:0:1::83e3 (2001:4860:0:1::83e3) 17.819 ms
11 2001:4860:0:1::8348 (2001:4860:0:1::8348) 17.153 ms 2001:4860:0:1::83be (2001:4860:0:1::83be) 17.927 ms 2001:4860:0:1::838c (2001:4860:0:1::838c) 26.350 ms
12 2001:4860::c:4001:5638 (2001:4860::c:4001:5638) 17.250 ms 2001:4860::c:4003:4958 (2001:4860::c:4003:4958) 17.747 ms 17.786 ms
13 * * 2001:4860::c:4003:364f (2001:4860::c:4003:364f) 18.077 ms
14 2001:4860::9:4003:6d45 (2001:4860::9:4003:6d45) 16.980 ms 2001:4860::9:4003:6d46 (2001:4860::9:4003:6d46) 18.932 ms 2001:4860::9:4003:6d45 (2001:4860::9:4003:6d45) 17.728 ms
15 2001:4860:0:1::60c9 (2001:4860:0:1::60c9) 17.694 ms 2001:4860:0:1::7e6b (2001:4860:0:1::7e6b) 18.164 ms 2001:4860:0:1::7eed (2001:4860:0:1::7eed) 16.825 ms
16 prg03s12-in-x0e.1e100.net (2a00:1450:4014:80e::200e) 16.525 ms 2001:4860:0:1::60cb (2001:4860:0:1::60cb) 17.044 ms prg03s12-in-x0e.1e100.net (2a00:1450:4014:80e::200e) 17.001 ms
jirka@jirka-Precision-T3610:~/vyuka_sspvc$
Ping funguje a spojení na TCP i UDP také. Zkusím ještě vypnout jeden z routerů (dizzy a rtr8) a uvidím, jak to bude fungovat. K tomu však musím udělat na rtr8 redundandní dhcpd server pro IPv4, což se mi dnes nepovede.