I can even ping any internet host from road warrior's LAN interface when iked 
is connected:

$ ping -I 192.168.0.1 remote_host.com -> works as should be

But no any traffic from 192.168.0.10 host except successful DNS 
queries/responses from/to Road Warrior's local DNS resolver.

$ telnet remote_host.com 80 -> from 192.168.0.10 LAN host is always fail. I can 
see ACKs from remote_host.com 80 from IPsec virtual 10.0.1.2 to 
192.168.0.10:80, but no connection.

All traffic goes trough Road Warrior's global VPN NAT rule when VPN is 
connected:

match out log on enc0 inet all nat-to 10.0.1.2

OR trough egress when VPN is disconnected:

match out log on egress from {lo0, 192.168.0.0/24} to any nat-to (egress:0)

# Outgoing www, https traffic
pass in on 192.168.0.1 inet proto tcp from 192.168.0.0/24 to any \
port {www, https} modulate state
pass out on enc0 inet proto tcp from 10.0.1.2 to any \
port {www, https} flags S/SA modulate state
pass out on (egress) inet proto tcp from (egress) to any \
port {www, https} flags S/SA modulate state

When Road Warrior's VPN is disconnected, any LAN client can connect any 
internet host as usual.

Please advice.

Martin

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Monday, February 3, 2020 9:03 PM, Martin Got <martin...@protonmail.com> 
wrote:

> OpenIKED IKEv2 VPN setup consists of OpenBSD-6.6 based remote server and 6.6 
> based road warrior -
> client with dynamic IP. VPN works stable even using a link behind ISP NAT 
> with ping latency from
> ~750ms to ~1100ms. Hope latency about 1000ms can't be related to the issue 
> because all the tests
> with disconnected/connected VPN have been made on the same ISP channel.
>
> Any of the hosts from LAN (192.168.0.0/24) connected to the road warrior can 
> reach external Internet
> hosts with disconnected VPN only.
>
> If VPN is connected, no one host from road warrior's LAN can reach any 
> internet host.
> But any of LAN host can connect to road warrior's local services listening on 
> lo0 even with VPN is
> connected or not.
>
> So I can't ping any Internet host from road warrior's LAN host if VPN is 
> connected, but I can ping
> outside Internet hosts from road warriors' localhost itself. In PF ICMP set 
> from any to any and ping
> works to any Internet host if VPN is disabled. I think it can't be bound to 
> firewall rules, maybe
> timeouts of PF connection states. I'm completely not sure about it.
>
> When VPN is connected, all roadwarrior's LAN traffic is disabled for some 
> reason, tcpdump shows
> requests and replies to LAN's host on enc0 but initiator (192.168.0.5) don't 
> receive any replies. I
> don't know why?
>
> $ tcpdump -en -i pflog0
> 10:12:43.598785 rule 4/(match) match out on enc0: 10.0.1.2 > 8.8.8.8: icmp: 
> echo request
> 10:12.43.598814 rule 563/(match) pass out on enc0: 10.0.1.2 > 8.8.8.8: icmp: 
> echo request
> 10.12.44.277267 rule 4/(match) match out on enc0: 10.0.1.2 > 192.168.0.5: 
> icmp: echo reply
> 10.12.47.277848 rule 4/(match) match out on enc0: 10.0.1.2 > 192.168.0.5: 
> icmp: echo reply
>
> LAN clients' can reach road warrior's localhost bound services like DNS, 
> proxy and it doesn't matter
> if VPN enabled or not, but no any outbound traffic with enabled VPN.
>
> Road warrior client has one NAT in PF to transmit packets from it's local IP 
> address when VPN is
> disabled, and second NAT rule to transmit packets when IKEv2 VPN is connected 
> like:
>
> $ pf.conf (client)
>
> ---NAT
>
> =======
>
> match out log on enc0 inet all nat-to 10.0.1.2
> match out log on rdomain 0 from {lo0, 192.168.0.0/24} to any nat-to (egress:0)
>
> ---ICMP
>
> ========
>
> pass in log quick on 192.168.0.1 inet proto icmp all icmp-type \
> echoreq, timex, paramprob, unreach code needfrag keep state
> pass out log inet proto icmp all
>
> ---Web
>
> =======
>
> pass in on 192.168.0.1 inet proto tcp from 192.168.0.0/24 to any \
> port {www, https} modulate state
> pass out on enc0 inet proto tcp from 10.0.1.2 to any \
> port {www, https} flags S/SA modulate state
> pass out on (egress) inet proto tcp from (egress) to any \
> port {www, https} flags S/SA modulate state
>
> ---IPsec
>
> =========
>
> pass in log on (egress) inet proto esp from any to (egress) port {isakmp, 
> ipsec-nat-t}
> pass out log on (egress) inet proto udp from (egress) to any port {isakmp, 
> ipsec-nat-t} keep state
>
> pass in log on enc0 inet proto ipencap from any to (egress) keep state 
> (if-bound)
> pass out log on enc0 inet proto ipencap from (egress) to any keep state 
> (if-bound)
>
> pass in log on enc0 inet from 0.0.0.0/0 to 0.0.0.0/0 keep state (if-bound)
> pass out log on enc0 inet from 0.0.0.0/0 to 0.0.0.0/0 keep state (if-bound)
>
> ---
>
> ====
>
> /etc/sysctl.conf has
>
> =====================
>
> net.inet.ip.forwarding=1
>
> I bypass all the possible SA flows from/to road warrior's LAN in 
> /etc/ipsec.conf, and all traffic
> from/to road warrior's localhost services so DNS works as expected (DNS 
> listens on road warrior's
> localhost and all queries were redirected by rdr-to rule in PF).
>
> $ /etc/ipsec.conf (client)
> flow from 127.0.0.1/32 to 127.0.0.1/32 type bypass
>
> flow from 127.0.0.1/32 to 192.168.0.0/24 type bypass
> flow from 192.168.0.0/24 to 127.0.0.1/32 type bypass
> flow from 192.168.0.0/24 to 192.168.0.0/24 type bypass
>
> $ /etc/iked.conf (client)
> ikev2 "road-warrior" active esp \
> from 0.0.0.0/0 to 0.0.0.0/0 \
> local 1.2.3.4 peer 4.3.2.1 \
> srcid roadw.vpn dstid srv.vpn \
> ikelifetime 80m lifetime 100m bytes 256m \
> tag "IKED" \
> tap "enc0"
>
> rcctl -f start iked (client)
>
> =============================
>
> iked(OK)
>
> ipsecctl -f /etc/ipsec.conf (client)
>
> =====================================
>
> ipsecctl -sa (client)
>
> ======================
>
> FLOWS:
> flow esp in from 0.0.0.0/0 to 0.0.0.0/0 peer 4.3.2.1 srcid FQDN/roadw.vpn 
> dstid FQDN/srv.vpn type
>
> use
> flow esp in from 192.168.0.0/24 to 192.168.0.0/24 type bypass
> flow esp in from 192.168.0.0/24 to 127.0.0.1 type bypass
> flow esp in from 127.0.0.1 to 192.168.0.0/24 type bypass
> flow esp in from 127.0.0.1 to 127.0.0.1 type bypass
>
> flow esp out from 0.0.0.0/0 to 0.0.0.0/0 peer 4.3.2.1 srcid FQDN/roadw.vpn 
> dstid FQDN/srv.vpn type
>
> require
> flow esp out from 192.168.0.0/24 to 192.168.0.0/24 type bypass
> flow esp out from 192.168.0.0/24 to 127.0.0.1 type bypass
> flow esp out from 127.0.0.1 to 192.168.0.0/24 type bypass
> flow esp out from 127.0.0.1 to 127.0.0.1 type bypass
>
> SAD:
> esp tunnel from 4.3.2.1 to 1.2.3.4 spi 0xe34780e9 auth hmac-sha2-512 enc 
> aes-256
> esp tunnel from 1.2.3.4 to 4.3.2.1 spi 0xe75f7182 auth hmac-sha2-512 enc 
> aes-256
>
> /etc/iked.conf (server)
>
> ========================
>
> ikev2 "server" passive esp \
> from 0.0.0.0/0 to 10.0.1.0/24 \
> local 4.3.2.1 peer any \
> srcid srv.vpn \
> ikelifetime 140m lifetime 200m bytes 110m \
> tag "IKED" \
> tap "enc0"


Reply via email to