> On Feb 6, 2022, at 12:07 PM, Mike Fischer <fischer+o...@lavielle.com> wrote:
> 
> Hi Łukasz,
> 
>>> Am 06.02.2022 um 12:08 schrieb Łukasz Moskała <l...@lukaszmoskala.pl>:
>>> 
>>> W dniu 6.02.2022 o 05:28, Mike Fischer pisze:
>>> OpenBSD 7.0 stable amf64
>>> My host has two ethernet interfaces, em0 and em1.
>>> Note: The host is a VM with two virtual interfaces.
>>> Both interfaces are configured like this for IPv6 in the /etc/hostname.em0 
>>> and /etc/hostname.em1 files:
>>> inet6 autoconf -temporary -soii
>>> They are connected to the same LAN and each produces a unique IPv6 address 
>>> using the same prefix and an EUI64 interface identifier as expected*.
>>> $ ifconfig em0|grep inet6|grep -vE '(fe80:| fd|temporary|deprecated)'
>>>    inet6 2001:db8::20c:29ff:fd9c:4b7 prefixlen 64 autoconf pltime 1070 
>>> vltime 7043
>>> $ ifconfig em1|grep inet6|grep -vE '(fe80:| fd|temporary|deprecated)‘
>>>    inet6 2001:db8::20c:29ff:fd9c:4c1 prefixlen 64 autoconf pltime 1032 
>>> vltime 7005
>>> DNS records have been set up*:
>>> $ dig +short a.example.com aaaa
>>> 2001:db8::20c:29ff:fd9c:4b7
>>> $ dig +short b.example.com aaaa
>>> 2001:db8::20c:29ff:fd9c:4c1
>>> $
>>> My httpd.conf looks like this*:
>>> ipa = "2001:db8::20c:29ff:fd9c:4b7"
>>> ipb = "2001:db8::20c:29ff:fd9c:4c1"
>>> server "a.example.com" {
>>>    listen on $ipa port 80
>>>    directory index index.html
>>>    location "/*" {
>>>        root "/htdocs/a"
>>>    }
>>> }
>>> server "b.example.com" {
>>>    listen on $ipb port 80
>>>    directory index index.html
>>>    location "/*" {
>>>        root "/htdocs/b"
>>>    }
>>> }
>>> /var/www/htdocs/a/index.html and /var/www/htdocs/b/index.html exist and 
>>> each contains a minimal HTML page.
>>> httpd -n sees no problem.
>>> rcctl start httpd works fine.
>>> However trying to access http://a.example.com or 
>>> http://[2001:db8::20c:29ff:fd9c:4b7] gets a timeout.
>>> Accessing http://b.example.com or http://[2001:db8::20c:29ff:fd9c:4c1] 
>>> works fine.
>>> Trying to find the cause I checked:
>>> $ netstat -an|grep LISTEN
>>> …
>>> tcp6         0      0  2001:db8::.80    *.*                    LISTEN
>>> tcp6         0      0  2001:db8::.80    *.*                    LISTEN
>>> …
>>> $
>>> Which seems weird because only the prefix is listed not the complete IPv6 
>>> addresses.
>>> Am I seeing a bug or is my expectation that both servers (virtual hosts) 
>>> work wrong?
>>> *) Hostnames and IPs anonymized.
>>> Thanks!
>>> Mike
>> 
>> "They are connected to the same LAN"
>> This is most likely your problem. Having two IPs on two interfaces in the 
>> same subnet will usually cause problems. Most likely you also have two 
>> default routes.
> 
> Yes, you are right. There are 2 default routes for IPv6.
> 
> Not sure why IPv6 works like this but that’s what I’m trying to learn. I am 
> using this machine as a test bed for figuring out IPv6. My expectation was 
> that IPv6 would work just like IPv4 in this scenario.
> 
> Note: For IPv4 the same setup works fine, yielding a web server that serves 
> both a.example.com and b.example.com on different IPs. The expectation would 
> be that replies would be send through the same interface the request came in 
> on. IPv4 has the drawback that I only have 1 public IPv4 address. So I need 
> to differentiate bei port number on the Internet side of my router to map to 
> the correct LAN IP.
> 
> So I learned something here, which was my goal. Thanks!
> 
> 
>> You can work around it by putting both interfaces in diffrent rdomains, then 
>> running two httpd instances, one in rdomain with first IP, second in rdomain 
>> with second IP.
> 

This will work.  You can use PF rules to cross rdomains if you require.

> I’ll look into this (more as a way to learn more about how this works than to 
> actually fill a pressing need). Thanks for the idea.
> 
> 
>> Or, assign both IPs statically to em0 (one with prefix /64, second with 
>> prefix /128), then remove em1 - I'm 99% sure this will solve your problem.
> 
> Yes. But in my experimental setup this would not be practical because the 
> IPv6 prefix is dynamic. Assigning a static IPv6 address will cease to work 
> when the prefix changes, at least for connections from the Internet. There 
> are issues with the setup of port forwarding on my router as well. I thought 
> I could get around all of these issues by using the second interface.
> 
> For this experiment the goal was get a single host to serve two websites on 
> separate IPv6 addresses. All this in a LAN setting where the public IPv6 
> prefix is dynamic. Getting it to work short term is easy using static IPs. 
> But ensuring it will work across prefix changes is more complicated. I do 
> have a script that triggers on prefix changes and could be used to adjust the 
> static IPs and the httpd.conf as needed. I don’t much like that solution 
> though.
> 
> 
> Thanks for your reply!
> 
> 
> Mike
> 

Reply via email to