1 ; Check if the prefetch option works properly for messages stored in the global 2 ; cache for non-ECS clients. The prefetch query needs to result in an ECS 3 ; outgoing query based on the client's IP. 4 ; Prefetch initiated via serve-expired. 5 6 server: 7 trust-anchor-signaling: no 8 target-fetch-policy: "0 0 0 0 0" 9 send-client-subnet: 1.2.3.4 10 max-client-subnet-ipv4: 21 11 module-config: "subnetcache iterator" 12 verbosity: 3 13 access-control: 127.0.0.1 allow_snoop 14 qname-minimisation: no 15 minimal-responses: no 16 iter-scrub-promiscuous: no 17 serve-expired: yes 18 serve-expired-client-timeout: 0 19 serve-expired-ttl: 1 20 serve-expired-client-timeout: 0 21 serve-expired-reply-ttl: 123 22 #prefetch: yes #not needed, expired answers also trigger refetch 23 ede: yes 24 ede-serve-expired: yes 25 26 stub-zone: 27 name: "." 28 stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. 29 CONFIG_END 30 31 SCENARIO_BEGIN Test prefetch option for global cache with ECS enabled (initiated via serve-expired) 32 33 ; K.ROOT-SERVERS.NET. 34 RANGE_BEGIN 0 100 35 ADDRESS 193.0.14.129 36 ENTRY_BEGIN 37 MATCH opcode qtype qname ednsdata 38 ADJUST copy_id 39 REPLY QR NOERROR 40 SECTION QUESTION 41 . IN NS 42 SECTION ANSWER 43 . IN NS K.ROOT-SERVERS.NET. 44 SECTION ADDITIONAL 45 HEX_EDNSDATA_BEGIN 46 ;; we expect to receive empty 47 HEX_EDNSDATA_END 48 K.ROOT-SERVERS.NET. IN A 193.0.14.129 49 ENTRY_END 50 51 ENTRY_BEGIN 52 MATCH opcode qtype qname 53 ADJUST copy_id 54 REPLY QR NOERROR 55 SECTION QUESTION 56 www.example.com. IN A 57 SECTION AUTHORITY 58 com. IN NS a.gtld-servers.net. 59 SECTION ADDITIONAL 60 a.gtld-servers.net. IN A 192.5.6.30 61 ENTRY_END 62 RANGE_END 63 64 ; a.gtld-servers.net. 65 RANGE_BEGIN 0 100 66 ADDRESS 192.5.6.30 67 ENTRY_BEGIN 68 MATCH opcode qtype qname ednsdata 69 ADJUST copy_id 70 REPLY QR NOERROR 71 SECTION QUESTION 72 com. IN NS 73 SECTION ANSWER 74 com. IN NS a.gtld-servers.net. 75 SECTION ADDITIONAL 76 HEX_EDNSDATA_BEGIN 77 ;; we expect to receive empty 78 HEX_EDNSDATA_END 79 a.gtld-servers.net. IN A 192.5.6.30 80 ENTRY_END 81 82 ENTRY_BEGIN 83 MATCH opcode qtype qname 84 ADJUST copy_id 85 REPLY QR NOERROR 86 SECTION QUESTION 87 www.example.com. IN A 88 SECTION AUTHORITY 89 example.com. IN NS ns.example.com. 90 SECTION ADDITIONAL 91 ns.example.com. IN A 1.2.3.4 92 ENTRY_END 93 RANGE_END 94 95 ; ns.example.com. 96 RANGE_BEGIN 0 10 97 ADDRESS 1.2.3.4 98 ENTRY_BEGIN 99 MATCH opcode qtype qname 100 ADJUST copy_id 101 REPLY QR NOERROR 102 SECTION QUESTION 103 example.com. IN NS 104 SECTION ANSWER 105 example.com. IN NS ns.example.com. 106 SECTION ADDITIONAL 107 HEX_EDNSDATA_BEGIN 108 ;; we expect to receive empty 109 HEX_EDNSDATA_END 110 ns.example.com. IN A 1.2.3.4 111 ENTRY_END 112 113 ; response to query of interest 114 ENTRY_BEGIN 115 MATCH opcode qtype qname 116 ADJUST copy_id 117 REPLY QR NOERROR 118 SECTION QUESTION 119 www.example.com. IN A 120 SECTION ANSWER 121 www.example.com. 200 IN A 10.20.30.40 122 SECTION AUTHORITY 123 example.com. IN NS ns.example.com. 124 SECTION ADDITIONAL 125 ns.example.com. IN A 1.2.3.4 126 ENTRY_END 127 RANGE_END 128 129 ; ns.example.com. 130 RANGE_BEGIN 11 100 131 ADDRESS 1.2.3.4 132 ENTRY_BEGIN 133 MATCH opcode qtype qname 134 ADJUST copy_id 135 REPLY QR NOERROR 136 SECTION QUESTION 137 example.com. IN NS 138 SECTION ANSWER 139 example.com. IN NS ns.example.com. 140 SECTION ADDITIONAL 141 HEX_EDNSDATA_BEGIN 142 ;; we expect to receive empty 143 HEX_EDNSDATA_END 144 ns.example.com. IN A 1.2.3.4 145 ENTRY_END 146 147 ; response to query of interest 148 ENTRY_BEGIN 149 MATCH opcode qtype qname ednsdata 150 ADJUST copy_id copy_ednsdata_assume_clientsubnet 151 REPLY QR NOERROR 152 SECTION QUESTION 153 www.example.com. IN A 154 SECTION ANSWER 155 www.example.com. 200 IN A 10.20.30.40 156 SECTION AUTHORITY 157 example.com. IN NS ns.example.com. 158 SECTION ADDITIONAL 159 HEX_EDNSDATA_BEGIN 160 ; client is 127.0.0.1 161 00 08 ; OPC 162 00 07 ; option length 163 00 01 ; Family 164 15 00 ; source mask, scopemask 165 7f 00 00 ; address 166 HEX_EDNSDATA_END 167 ns.example.com. IN A 1.2.3.4 168 ENTRY_END 169 RANGE_END 170 171 STEP 1 QUERY 172 ENTRY_BEGIN 173 REPLY RD 174 SECTION QUESTION 175 www.example.com. IN A 176 ENTRY_END 177 178 ; This answer should be in the global cache (because no ECS from upstream) 179 STEP 2 CHECK_ANSWER 180 ENTRY_BEGIN 181 MATCH all 182 REPLY QR RD RA NOERROR 183 SECTION QUESTION 184 www.example.com. IN A 185 SECTION ANSWER 186 www.example.com. 200 IN A 10.20.30.40 187 SECTION AUTHORITY 188 example.com. IN NS ns.example.com. 189 SECTION ADDITIONAL 190 ns.example.com. IN A 1.2.3.4 191 ENTRY_END 192 193 ; Try to trigger a prefetch with expired data 194 STEP 3 TIME_PASSES ELAPSE 200 195 196 STEP 11 QUERY 197 ENTRY_BEGIN 198 REPLY RD DO 199 SECTION QUESTION 200 www.example.com. IN A 201 ENTRY_END 202 203 ; This expired record came from the global cache and a prefetch is triggered. 204 STEP 12 CHECK_ANSWER 205 ENTRY_BEGIN 206 MATCH all ttl ede=3 207 REPLY QR RD RA DO NOERROR 208 SECTION QUESTION 209 www.example.com. IN A 210 SECTION ANSWER 211 www.example.com. 123 IN A 10.20.30.40 212 SECTION AUTHORITY 213 example.com. 3400 IN NS ns.example.com. 214 SECTION ADDITIONAL 215 ns.example.com. 3400 IN A 1.2.3.4 216 ENTRY_END 217 218 ; Allow enough time to pass so that the expired record from the global cache 219 ; cannot be used anymore. 220 STEP 14 TIME_PASSES ELAPSE 1 221 222 ; Query again to verify that the record was prefetched and stored in the ECS 223 ; cache. 224 STEP 15 QUERY 225 ENTRY_BEGIN 226 REPLY RD 227 SECTION QUESTION 228 www.example.com. IN A 229 ENTRY_END 230 231 ; This record came from the ECS cache. 232 STEP 16 CHECK_ANSWER 233 ENTRY_BEGIN 234 MATCH all ttl 235 REPLY QR RD RA NOERROR 236 SECTION QUESTION 237 www.example.com. IN A 238 SECTION ANSWER 239 www.example.com. 199 IN A 10.20.30.40 240 SECTION AUTHORITY 241 example.com. 3599 IN NS ns.example.com. 242 SECTION ADDITIONAL 243 ns.example.com. 3599 IN A 1.2.3.4 244 ENTRY_END 245 246 SCENARIO_END 247