Take a look at the example in man relayd.conf. You have to set the X-header like:
match header set "X-Forwarded-For" \ value "$REMOTE_ADDR" match header set "X-Forwarded-By" \ value "$SERVER_ADDR:$SERVER_PORT" I could post an example when I'm back at my machine. Am 8. Januar 2024 23:51:33 MEZ schrieb Adriano Barbosa <barbosa....@gmail.com>: >On Mon, Jan 08, 2024 at 07:01:04AM -0800, Paul Pace wrote: >> On 1/7/24 1:31 PM, Adriano Barbosa wrote: >> > On Sun, Jan 07, 2024 at 05:21:04AM -0800, Paul Pace wrote: >> > > On 1/6/24 7:35 PM, Adriano Barbosa wrote: >> > > > On Thu, Jan 04, 2024 at 06:57:10PM -0800, Paul Pace wrote: >> > > > > On 1/4/24 10:22 AM, Adriano Barbosa wrote: >> > > > > > Hi! >> > > > > > I'm trying to use relayd with multiple FQDNs mixing remote servers >> > > > > > with and without tls: >> > > > > > >> > > > > > relayd -- fqdn1 --> 127.0.0.1 (no tls) >> > > > > > -- fqdn2 --> x.x.x.x (with tls) >> > > > > > >> > > > > > I wrote my relayd.conf like this: >> > > > > > >> > > > > > table <fqdn1> { 127.0.0.1 } >> > > > > > table <fqdn2> { x.x.x.x } >> > > > > > >> > > > > > http protocol https { >> > > > > > tls keypair fqdn1 >> > > > > > tls keypair fqdn2 >> > > > > > >> > > > > > match request header "Host" value "fqdn1" tag "fqdn1" >> > > > > > pass request tagged "fqdn1" forward to <fqdn1> >> > > > > > >> > > > > > match request header "Host" value "fqdn2" tag "fqdn2" >> > > > > > pass request tagged "fqdn2" forward to <fqdn2> >> > > > > > } >> > > > > > >> > > > > > relay wwwtls { >> > > > > > listen on egress port 443 tls >> > > > > > protocol https >> > > > > > forward to <fqdn1> port 80 >> > > > > > forward with tls to <fqdn2> port 443 >> > > > > > } >> > > > > >> > > > > With one forward requiring TLS in a relay block, relayd will require >> > > > > TLS for >> > > > > all forward statements in the relay block. >> > > > > >> > > > > > >> > > > > > I have fqdn2 working and fqdn1 giving a "curl: (52) Empty reply >> > > > > > from >> > > > > > server". >> > > > > > Removing "with tls" on the second forward, fqdn1 works and fqdn2 >> > > > > > gives >> > > > > > a "Client sent an HTTP request to an HTTPS server." >> > > > > > >> > > > > > Is it possible to have relayd working on this scenario? What am I >> > > > > > missing here? >> > > > > > >> > > > > > Obrigado! >> > > > > > -- >> > > > > > Adriano >> > > > > >> > > > >> > > > Thank you for the response. >> > > > >> > > > Digging a little more, I found that if I change the listen port from >> > > > 443 to values other than 443 and 80, the "match request host" filter >> > > > stops working. The behaviour is the same with or without "with tls" on >> > > > the relay. >> > > > >> > > > With port 443: >> > > > stable# curl --insecure https://fqdn1 >> > > > <h1>Server 1</h1> >> > > > stable# curl --insecure https://fqdn2 >> > > > <h1>Server 2</h1> >> > > > >> > > > With port 4430 and allegedly any port other than 80 and 443: >> > > > stable# curl --insecure https://fqdn1:4430 >> > > > <h1>Server 1</h1> >> > > > stable# curl --insecure https://fqdn2:4430 >> > > > <h1>Server 1</h1> >> > > > >> > > What does curl -vk show? >> > > >> > >> > Unfortunately, no difference. Follows: >> > >> > $ curl --insecure -vk https://fqdn2 >> > * Host fqdn2:443 was resolved. >> > * IPv6: (none) >> > * IPv4: 127.0.0.1 >> > * Trying 127.0.0.1:443... >> > * Connected to fqdn2 (127.0.0.1) port 443 >> > * ALPN: curl offers h2,http/1.1 >> > * TLSv1.3 (OUT), TLS handshake, Client hello (1): >> > * TLSv1.3 (IN), TLS handshake, Server hello (2): >> > * TLSv1.3 (IN), TLS handshake, Unknown (8): >> > * TLSv1.3 (IN), TLS handshake, Certificate (11): >> > * TLSv1.3 (IN), TLS handshake, CERT verify (15): >> > * TLSv1.3 (IN), TLS handshake, Finished (20): >> > * TLSv1.3 (OUT), TLS handshake, Finished (20): >> > * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / [blank] / UNDEF >> > * ALPN: server did not agree on a protocol. Uses default. >> > * Server certificate: >> > * subject: C=BR; ST=MS; L=DOU >> > * start date: Jan 6 20:12:43 2024 GMT >> > * expire date: Jan 5 20:12:43 2025 GMT >> > * issuer: C=BR; ST=MS; L=DOU >> > * SSL certificate verify result: self signed certificate (18), continuing >> > anyway. >> > * Certificate level 0: Public key type ? (4096/128 Bits/secBits), signed >> > using sha256WithRSAEncryption >> > * using HTTP/1.x >> > > GET / HTTP/1.1 >> > > Host: fqdn2 >> > > User-Agent: curl/8.5.0 >> > > Accept: */* >> > > >> > < HTTP/1.1 200 OK >> > < Connection: keep-alive >> > < Content-Length: 18 >> > < Content-Type: text/html >> > < Date: Sun, 07 Jan 2024 21:23:24 GMT >> > < Last-Modified: Sun, 07 Jan 2024 21:19:24 GMT >> > < Server: OpenBSD httpd >> > < >> > <h1>Server 2</h1> >> > * Connection #0 to host fqdn2 left intact >> > >> > and >> > >> > $ curl --insecure -vk https://fqdn2:4430 >> > * Host fqdn2:4430 was resolved. >> > * IPv6: (none) >> > * IPv4: 127.0.0.1 >> > * Trying 127.0.0.1:4430... >> > * Connected to fqdn2 (127.0.0.1) port 4430 >> > * ALPN: curl offers h2,http/1.1 >> > * TLSv1.3 (OUT), TLS handshake, Client hello (1): >> > * TLSv1.3 (IN), TLS handshake, Server hello (2): >> > * TLSv1.3 (IN), TLS handshake, Unknown (8): >> > * TLSv1.3 (IN), TLS handshake, Certificate (11): >> > * TLSv1.3 (IN), TLS handshake, CERT verify (15): >> > * TLSv1.3 (IN), TLS handshake, Finished (20): >> > * TLSv1.3 (OUT), TLS handshake, Finished (20): >> > * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / [blank] / UNDEF >> > * ALPN: server did not agree on a protocol. Uses default. >> > * Server certificate: >> > * subject: C=BR; ST=MS; L=DOU >> > * start date: Jan 6 20:12:43 2024 GMT >> > * expire date: Jan 5 20:12:43 2025 GMT >> > * issuer: C=BR; ST=MS; L=DOU >> > * SSL certificate verify result: self signed certificate (18), continuing >> > anyway. >> > * Certificate level 0: Public key type ? (4096/128 Bits/secBits), signed >> > using sha256WithRSAEncryption >> > * using HTTP/1.x >> > > GET / HTTP/1.1 >> > > Host: fqdn2:4430 >> > > User-Agent: curl/8.5.0 >> > > Accept: */* >> > > >> > < HTTP/1.1 200 OK >> > < Connection: keep-alive >> > < Content-Length: 18 >> > < Content-Type: text/html >> > < Date: Sun, 07 Jan 2024 21:25:42 GMT >> > < Last-Modified: Sun, 07 Jan 2024 21:19:15 GMT >> > < Server: OpenBSD httpd >> > < >> > <h1>Server 1</h1> >> > * Connection #0 to host fqdn2 left intact >> > >> My best guess is httpd is not receiving a host header so is serving the >> first server block. >> >> Try setting relay logs verbose and then monitor with something like: >> >> relayctl log verbose >> tail -f /var/log/daemon | grep relay >> > >That seems to be the reason. Where can I find the meaning of each >field in the log? I was no able to find on relay{ctl,d,d.conf} man >pages =( >Is there any tweak on the config file to make it work or is that an >unexpected behaviour? > >With requests on port 443: >Jan 8 18:43:56 stable relayd[40926]: relay wwwtls, session 2 (1 active), >fqdn1, 127.0.0.1 -> 127.0.0.1:8080, done, GET -> 127.0.0.1:8080; >Jan 8 18:43:58 stable relayd[39939]: relay wwwtls, session 4 (1 active), >fqdn2, 127.0.0.1 -> 127.0.0.1:8081, done, GET -> 127.0.0.1:8081; > >With requests on port 4430: >Jan 8 18:44:03 stable relayd[40926]: relay wwwtls2, session 3 (1 active), 0, >127.0.0.1 -> 127.0.0.1:8080, done, GET >Jan 8 18:44:19 stable relayd[40926]: relay wwwtls2, session 4 (1 active), 0, >127.0.0.1 -> 127.0.0.1:8080, done, GET > >> You could also add a first server block that is only served when other >> blocks aren't matched. >> >> > > > Port 8080 also reproduces this last result. >> > > > Is that the expected behaviour? BTW, I'm running 7.4. >> > > > >> > > > Please find relayd.conf and httpd.conf below. >> > > > fqdn{1,2} are on /etc/hosts as 127.0.0.1 and the respective tls >> > > > certificates exists in /etc/ssl and keys in /etc/ssl/private. >> > > > >> > > > Obrigado! >> > > > -- >> > > > Adriano >> > > > >> > > > >> > > > # relayd.conf >> > > > addr="127.0.0.1" >> > > > >> > > > table <fqdn1> { 127.0.0.1 } >> > > > table <fqdn2> { 127.0.0.1 } >> > > > >> > > > http protocol https { >> > > > tls keypair fqdn1 >> > > > tls keypair fqdn2 >> > > > >> > > > match request header "Host" value "fqdn1" tag "fqdn1" >> > > > pass request tagged "fqdn1" forward to <fqdn1> >> > > > >> > > > match request header "Host" value "fqdn2" tag "fqdn2" >> > > > pass request tagged "fqdn2" forward to <fqdn2> >> > > > } >> > > > >> > > > http protocol https2 { >> > > > tls keypair fqdn1 >> > > > tls keypair fqdn2 >> > > > >> > > > match request header "Host" value "fqdn1" tag "fqdn1" >> > > > pass request tagged "fqdn1" forward to <fqdn1> >> > > > >> > > > match request header "Host" value "fqdn2" tag "fqdn2" >> > > > pass request tagged "fqdn2" forward to <fqdn2> >> > > > } >> > > > >> > > > relay wwwtls { >> > > > listen on $addr port 443 tls >> > > > protocol https >> > > > >> > > > forward to <fqdn1> port 8080 >> > > > forward to <fqdn2> port 8081 >> > > > } >> > > > >> > > > relay wwwtls2 { >> > > > listen on $addr port 4430 tls >> > > > protocol https2 >> > > > >> > > > forward to <fqdn1> port 8080 >> > > > forward to <fqdn2> port 8081 >> > > > } >> > > > >> > > > >> > > > # httpd.conf >> > > > addr="127.0.0.1" >> > > > >> > > > server "fqdn1" { >> > > > listen on $addr port 8080 >> > > > location "*" { >> > > > root "/htdocs/server1" >> > > > } >> > > > } >> > > > >> > > > server "fqdn2" { >> > > > listen on $addr port 8081 >> > > > location "*" { >> > > > root "/htdocs/server2" >> > > > } >> > > > } >> > > >> > -- Diese Nachricht wurde von meinem Android-Gerät mit K-9 Mail gesendet.