outline-apps icon indicating copy to clipboard operation
outline-apps copied to clipboard

Add option to skip proxying local network in Outline Client

Open whonion opened this issue 7 months ago • 6 comments

Is there an existing issue that is already proposing this?

  • [x] I have searched the existing issues

Application

Outline Client

What are you trying to do? What is your use case?

I use Outline Client to securely access the internet via VPN, but I also need to access devices and services on my local network, such as printers, file servers, and internal websites. Currently, all traffic is routed through the VPN, which makes it impossible or inconvenient to reach these local resources. My use case is to be able to use Outline for secure internet access while still having direct access to my local network devices without disconnecting the VPN.

Is your feature request related to a problem? Please describe it.

Description: It would be very useful to add an option in Outline Client to exclude local addresses (e.g., 192.168.0.0/16, 10.0.0.0/8, 127.0.0.1, etc.) from being proxied. This would allow users to access local resources (printers, NAS, internal websites, etc.) directly, bypassing the VPN/proxy, which is often required in corporate and home networks. Use case: I use Outline to access the internet via VPN, but I need traffic to local devices (e.g., printers, local servers) to go directly, not through the VPN. Currently, there is no such option, and I have to manually disconnect Outline to work with local resources. Suggestion: Add an option in the client settings to exclude certain IP ranges (e.g., standard local network ranges) from being proxied.

Describe the solution you'd like.

I would like to have an option in the Outline Client settings that allows users to exclude local network addresses (such as 192.168.0.0/16, 10.0.0.0/8, 127.0.0.1, etc.) from being proxied through the VPN. This option should enable direct access to local network resources while all other traffic continues to be routed through the VPN. Ideally, users should be able to specify which IP ranges to exclude, or simply enable a checkbox to "Skip proxy for local network".

Describe alternatives you've considered

No response

whonion avatar May 21 '25 07:05 whonion

Hi @whonion, thank you for your detailed request.

It's already the intended behavior for Outline to bypass local addresses. Here's an example of excluded address list and another.

Could you say more about the kind of devices you're accessing on your local network that you find you need to turn off the VPN to access? What IP addresses are they located at?

ohnorobo avatar May 21 '25 19:05 ohnorobo

Hey there, @ohnorobo I looked at the list of exceptions. And yes indeed my local network is included in these subnet masks: 192.168.0.0/24 The current local network has a DHCP server configured to give DNS servers: 192.168.1.2 (Local AD/DS) 192.168.1.1 (WAN-router) 94.140.14.14 (Adguard) 94.140.15.15 (Adguard)

But the thing is that data forwarding with the global Outline proxy enabled is processed slower than if the VPN is disabled. That is, requests to the local network via SMB protocol or when sending a job to a network printer “hangs” As if proxying still occurs or is pre-executed. Sometimes with the Outline VPN turned on, requests to the legacy SMB protocol don't happen at all until I turn the VPN off.

OS: Windows 11x64

Protocols: SMB WDS LPR/LPD

Also with VPN enabled, ping does not go through to any computer by domain name until I turn off the VPN.

Perhaps more fine tuning is needed in my situation, but it seems that in the current configuration with global proxy enabled, the local network DNS server is simply ignored and the following is taken (Adguard)

whonion avatar May 22 '25 02:05 whonion

Ah, okay. I think there are 3 separate issues.

Local Adguard DNS

Outline has a longstanding behavior where it forces DNS requests to its own choice of DNS server in a very opinionated way. This works for most mainstream users, but you're far from the first power user it has annoyed. See https://github.com/Jigsaw-Code/outline-apps/issues/568. As you might guess from the age of that feature request though, it's not something that we will prioritize anytime soon. There are a few workarounds in that thread, but I think only for choosing your own cloud DNS, none that will work for accessing local DNS.

Local network printer protocols

For SMB / WDS / LPR/LPD they sometimes succeed, but sometimes hang and then succeed after you go through and turn off the VPN? I don't know about those specific protocols, but I wonder if we could be taking too long buffering traffic that should be passed through to the local network. Paging @jyyi1 who knows more about the windows routing.

Ping

When you say ping to any computer do you mean any computer anywhere, or any computer on your local network?

I just ran ping ping-test.net through my outline connection (not using windows) for example and it works fine. Does that fail for you, or is it a more local issue? Could it be local domains failing to resolve due to AD/DS not working?

ohnorobo avatar May 26 '25 10:05 ohnorobo

It seems to be a bug, we should exclude local traffic from the VPN:

https://github.com/Jigsaw-Code/outline-apps/blob/fc0b03edf0ddf3c9b8a829d4ef709c57fe1b4e1c/client/electron/windows/OutlineService/OutlineService/OutlineService.cs#L693-L707

@whonion can you confirm whether these routing entries exist in the routing table?

jyyi1 avatar May 27 '25 19:05 jyyi1

@ohnorobo

In my case, I am trying to ping a local computer by its hostname — specifically, the DNS server that is listed first in my system's network settings (192.168.1.2). When Outline VPN is enabled, pinging this hostname does not resolve to the local IP, but instead to an external address. With VPN disabled, everything works as expected and the local DNS server responds.

@jyyi1

Here are the logs you requested:

With Outline VPN enabled:

route print
===========================================================================
Interface List
  9...XX:XX:XX:XX:XX:XX ......VirtualBox Host-Only Ethernet Adapter
  7...XX:XX:XX:XX:XX:XX ......Realtek Gaming 2.5GbE Family Controller
 12...XX:XX:XX:XX:XX:XX ......Realtek 8852CE WiFi 6E PCI-E NIC
 24...XX:XX:XX:XX:XX:XX ......Microsoft Wi-Fi Direct Virtual Adapter
 17...XX:XX:XX:XX:XX:XX ......Microsoft Wi-Fi Direct Virtual Adapter #2
 26...XX:XX:XX:XX:XX:XX ......VMware Virtual Ethernet Adapter for VMnet1
 18...XX:XX:XX:XX:XX:XX ......VMware Virtual Ethernet Adapter for VMnet8
 20...XX:XX:XX:XX:XX:XX ......TAP-Windows Adapter V9 #2
  3...XX:XX:XX:XX:XX:XX ......Bluetooth Device (Personal Area Network) #3
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Address           Netmask      Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.108     25
          0.0.0.0        128.0.0.0        10.0.85.1        10.0.85.2     35
          0.0.0.0        255.0.0.0      192.168.1.1    192.168.1.108     25
         10.0.0.0        255.0.0.0      192.168.1.1    192.168.1.108     25
        10.0.85.2  255.255.255.255         On-link         10.0.85.2    291
       100.64.0.0      255.192.0.0      192.168.1.1    192.168.1.108     25
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
        128.0.0.0        128.0.0.0        10.0.85.1        10.0.85.2     35
      169.254.0.0      255.255.0.0      192.168.1.1    192.168.1.108     25
       172.16.0.0      255.240.0.0      192.168.1.1    192.168.1.108     25
        192.0.0.0    255.255.255.0      192.168.1.1    192.168.1.108     25
        192.0.2.0    255.255.255.0      192.168.1.1    192.168.1.108     25
     192.31.196.0    255.255.255.0      192.168.1.1    192.168.1.108     25
     192.52.193.0    255.255.255.0      192.168.1.1    192.168.1.108     25
      192.88.99.0    255.255.255.0      192.168.1.1    192.168.1.108     25
      192.168.0.0      255.255.0.0      192.168.1.1    192.168.1.108     25
      192.168.1.0    255.255.255.0         On-link     192.168.1.108    281
    192.168.1.108  255.255.255.255         On-link     192.168.1.108    281
    192.168.1.255  255.255.255.255         On-link     192.168.1.108    281
     192.168.37.0    255.255.255.0         On-link      192.168.37.1    291
     192.168.37.1  255.255.255.255         On-link      192.168.37.1    291
   192.168.37.255  255.255.255.255         On-link      192.168.37.1    291
     192.168.56.0    255.255.255.0         On-link      192.168.56.1    281
     192.168.56.1  255.255.255.255         On-link      192.168.56.1    281
   192.168.56.255  255.255.255.255         On-link      192.168.56.1    281
    192.168.152.0    255.255.255.0         On-link     192.168.152.1    291
    192.168.152.1  255.255.255.255         On-link     192.168.152.1    291
  192.168.152.255  255.255.255.255         On-link     192.168.152.1    291
     192.175.48.0    255.255.255.0      192.168.1.1    192.168.1.108     25
       198.18.0.0      255.254.0.0      192.168.1.1    192.168.1.108     25
     198.51.100.0    255.255.255.0      192.168.1.1    192.168.1.108     25
      203.0.113.0    255.255.255.0      192.168.1.1    192.168.1.108     25
         224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
         224.0.0.0        240.0.0.0         On-link      192.168.56.1    281
         224.0.0.0        240.0.0.0         On-link     192.168.152.1    291
         224.0.0.0        240.0.0.0         On-link         10.0.85.2    291
         224.0.0.0        240.0.0.0         On-link      192.168.37.1    291
         224.0.0.0        240.0.0.0         On-link     192.168.1.108    281
         240.0.0.0        240.0.0.0      192.168.1.1    192.168.1.108     25
   255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
   255.255.255.255  255.255.255.255         On-link      192.168.56.1    281
   255.255.255.255  255.255.255.255         On-link     192.168.152.1    291
   255.255.255.255  255.255.255.255         On-link         10.0.85.2    291
   255.255.255.255  255.255.255.255         On-link      192.168.37.1    291
   255.255.255.255  255.255.255.255         On-link     192.168.1.108    281
===========================================================================
Persistent Routes:
  Network Address            Netmask    Gateway      Metric
      192.168.1.0    255.255.255.0   [REDACTED]       1
===========================================================================

> nslookup server
DNS request timed out.
    timeout was 2 seconds.
Server:  UnKnown
Address:  192.168.1.2

DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
*** Request to UnKnown timed-out

> ping server
Pinging cdl-lb-1356093980.us-east-1.elb.amazonaws.com [3.211.254.194] with 32 bytes of data:
Reply from 3.211.254.194: bytes=32 time<1ms TTL=64
Reply from 3.211.254.194: bytes=32 time<1ms TTL=64
Reply from 3.211.254.194: bytes=32 time<1ms TTL=64
Reply from 3.211.254.194: bytes=32 time<1ms TTL=64

Ping statistics for 3.211.254.194:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

With Outline VPN disabled:

route print
===========================================================================
Interface List
  9...XX:XX:XX:XX:XX:XX ......VirtualBox Host-Only Ethernet Adapter
  7...XX:XX:XX:XX:XX:XX ......Realtek Gaming 2.5GbE Family Controller
 12...XX:XX:XX:XX:XX:XX ......Realtek 8852CE WiFi 6E PCI-E NIC
 24...XX:XX:XX:XX:XX:XX ......Microsoft Wi-Fi Direct Virtual Adapter
 17...XX:XX:XX:XX:XX:XX ......Microsoft Wi-Fi Direct Virtual Adapter #2
 26...XX:XX:XX:XX:XX:XX ......VMware Virtual Ethernet Adapter for VMnet1
 18...XX:XX:XX:XX:XX:XX ......VMware Virtual Ethernet Adapter for VMnet8
 20...XX:XX:XX:XX:XX:XX ......TAP-Windows Adapter V9 #2
  3...XX:XX:XX:XX:XX:XX ......Bluetooth Device (Personal Area Network) #3
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Address           Netmask      Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.108     25
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
         127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
   127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
      192.168.1.0    255.255.255.0         On-link     192.168.1.108    281
     192.168.1.108  255.255.255.255         On-link     192.168.1.108    281
     192.168.1.255  255.255.255.255         On-link     192.168.1.108    281
      192.168.37.0    255.255.255.0         On-link      192.168.37.1    291
      192.168.37.1  255.255.255.255         On-link      192.168.37.1    291
    192.168.37.255  255.255.255.255         On-link      192.168.37.1    291
      192.168.56.0    255.255.255.0         On-link      192.168.56.1    281
      192.168.56.1  255.255.255.255         On-link      192.168.56.1    281
    192.168.56.255  255.255.255.255         On-link      192.168.56.1    281
     192.168.152.0    255.255.255.0         On-link     192.168.152.1    291
     192.168.152.1  255.255.255.255         On-link     192.168.152.1    291
   192.168.152.255  255.255.255.255         On-link     192.168.152.1    291
         224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
         224.0.0.0        240.0.0.0         On-link      192.168.56.1    281
         224.0.0.0        240.0.0.0         On-link     192.168.152.1    291
         224.0.0.0        240.0.0.0         On-link      192.168.37.1    291
         224.0.0.0        240.0.0.0         On-link     192.168.1.108    281
   255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
   255.255.255.255  255.255.255.255         On-link      192.168.56.1    281
   255.255.255.255  255.255.255.255         On-link     192.168.152.1    291
   255.255.255.255  255.255.255.255         On-link      192.168.37.1    291
   255.255.255.255  255.255.255.255         On-link     192.168.1.108    281
===========================================================================
Persistent Routes:
  Network Address            Netmask    Gateway      Metric
      192.168.1.0    255.255.255.0   [REDACTED]       1
===========================================================================

> nslookup server
Server:  192.168.1.2
Address:  192.168.1.2

Name:    server.localdomain
Address:  192.168.1.2

> ping server
Pinging server.localdomain [192.168.1.2] with 32 bytes of data:
Reply from 192.168.1.2: bytes=32 time<1ms TTL=128
Reply from 192.168.1.2: bytes=32 time<1ms TTL=128
Reply from 192.168.1.2: bytes=32 time<1ms TTL=128
Reply from 192.168.1.2: bytes=32 time=2ms TTL=128

Ping statistics for 192.168.1.2:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 2ms, Average = 0ms

Among all the listed interfaces, only TAP-Windows Adapter V9 (Outline) and Realtek Gaming 2.5GbE Family Controller (Ethernet) are actually used for connectivity.

Additionally, it would be preferable if TAP interfaces were not duplicated or multiplied after each Outline launch or reinstall (although I am not sure if this is an Outline issue or a Windows issue).

whonion avatar May 28 '25 05:05 whonion

@whonion Thanks for providing the logs—they've really helped clarify the situation!

It turns out that the issue is not about Outline proxying local traffic (actually it's not), but it's about the DNS.

To ensure Outline is secure and prevent your ISP from seeing your activity (which can lead to censorship or other issues), Outline uses a trusted public DNS provider instead of your local one (in your case, it's your router). This means that public DNS can't resolve local hostnames, causing access to local services to fail.

This is a known limitation and a long-standing feature request (#249). We're still exploring the best way to address it, and feel free to add your thoughts to that feature request.

jyyi1 avatar Jun 02 '25 19:06 jyyi1

We're closing this issue due to inactivity. We apologize if we never had a chance to respond to your original inquiry. If you're still experiencing problems or have any further questions, please feel free to reopen this issue or create a new one.

jyyi1 avatar Aug 04 '25 15:08 jyyi1