| varnishtest "Test IPv4/IPv6 except param for the forwardfor and originalto options" |
| #REQUIRE_VERSION=2.4 |
| |
| # This config tests the except parameter for the HTTP forwardfor and originalto |
| # options. |
| |
| feature ignore_unknown_macro |
| |
| haproxy h1 -conf { |
| defaults |
| mode http |
| timeout connect 1s |
| timeout client 1s |
| timeout server 1s |
| |
| frontend fe1 |
| bind "fd@${fe1}" |
| http-request set-src hdr(x-src) |
| http-request set-dst hdr(x-dst) |
| use_backend be1 if { path /req1 } |
| use_backend be2 if { path /req2 } |
| use_backend be3 if { path /req3 } |
| use_backend be4 if { path /req4 } |
| use_backend be5 if { path /req5 } |
| |
| frontend fe2 |
| bind "fd@${fe2}" |
| http-request return status 200 hdr x-ff "%[req.hdr(x-forwarded-for)]" hdr x-ot "%[req.hdr(x-original-to)]" |
| |
| backend be1 |
| option forwardfor except 127.0.0.1 |
| option originalto except 127.0.0.1 |
| server s1 ${h1_fe2_addr}:${h1_fe2_port} |
| |
| backend be2 |
| option forwardfor except 10.0.0.1/25 |
| option originalto except 10.0.0.1/25 |
| server s1 ${h1_fe2_addr}:${h1_fe2_port} |
| |
| backend be3 |
| option forwardfor except ::1 |
| option originalto except ::1 |
| server s1 ${h1_fe2_addr}:${h1_fe2_port} |
| |
| backend be4 |
| option forwardfor except 2001:db8::1:0:0:1 |
| option originalto except 2001:db8::1:0:0:1 |
| server s1 ${h1_fe2_addr}:${h1_fe2_port} |
| |
| backend be5 |
| option forwardfor except 2001:db8:1f89::/48 |
| option originalto except 2001:db8:1f89::/48 |
| server s1 ${h1_fe2_addr}:${h1_fe2_port} |
| } -start |
| |
| client c1 -connect ${h1_fe1_sock} { |
| txreq -req GET -url /req1 \ |
| -hdr "x-src: 127.0.0.1" \ |
| -hdr "x-dst: 127.0.0.1" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == <undef> |
| expect resp.http.x-ot == <undef> |
| |
| txreq -req GET -url /req1 \ |
| -hdr "x-src: 127.0.0.2" \ |
| -hdr "x-dst: 127.0.0.2" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == "127.0.0.2" |
| expect resp.http.x-ot == "127.0.0.2" |
| |
| |
| txreq -req GET -url /req2 \ |
| -hdr "x-src: 10.0.0.1" \ |
| -hdr "x-dst: 10.0.0.1" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == <undef> |
| expect resp.http.x-ot == <undef> |
| |
| txreq -req GET -url /req2 \ |
| -hdr "x-src: 10.0.0.128" \ |
| -hdr "x-dst: 10.0.0.128" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == "10.0.0.128" |
| expect resp.http.x-ot == "10.0.0.128" |
| |
| txreq -req GET -url /req3 \ |
| -hdr "x-src: ::1" \ |
| -hdr "x-dst: ::1" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == <undef> |
| expect resp.http.x-ot == <undef> |
| |
| txreq -req GET -url /req3 \ |
| -hdr "x-src: ::2" \ |
| -hdr "x-dst: ::2" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == "::2" |
| expect resp.http.x-ot == "::2" |
| |
| txreq -req GET -url /req4 \ |
| -hdr "x-src: 2001:db8::1:0:0:1" \ |
| -hdr "x-dst: 2001:db8::1:0:0:1" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == <undef> |
| expect resp.http.x-ot == <undef> |
| |
| txreq -req GET -url /req4 \ |
| -hdr "x-src: 2001:db8::1:0:0:2" \ |
| -hdr "x-dst: 2001:db8::1:0:0:2" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == "2001:db8::1:0:0:2" |
| expect resp.http.x-ot == "2001:db8::1:0:0:2" |
| |
| txreq -req GET -url /req5 \ |
| -hdr "x-src: 2001:db8:1f89::1" \ |
| -hdr "x-dst: 2001:db8:1f89::1" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == <undef> |
| expect resp.http.x-ot == <undef> |
| |
| txreq -req GET -url /req5 \ |
| -hdr "x-src: 2001:db8:1f90::1" \ |
| -hdr "x-dst: 2001:db8:1f90::1" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ff == "2001:db8:1f90::1" |
| expect resp.http.x-ot == "2001:db8:1f90::1" |
| } -run |