summaryrefslogtreecommitdiff
path: root/fix_work_dns.sh
blob: 73a125a65b9c909bfe3ab0cd15baf626f58c0f1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/sh

interface="$1"
event="$2"

logger="/usr/bin/logger -s -t fix_work_vpn"

$logger "Received $event for $interface"

case $interface in
    tun0) case $event in
              up) $logger "Setting dnsovertls false"
                  resolvectl dnsovertls $interface false;
                  openconnet_pid=$(pgrep -f openconnect)
                  $logger "Setting openconnect PID $openconnet_pid to run outside VPN"
                  mullvad split-tunnel add $openconnet_pid;
                  dns_servers=$(resolvectl dns tun0 | cut -d: -f2- | sed 's/^ *//;s/ /, /')
                  $logger "Found DNS endpoints $dns_servers and setting exemptions in nftables"
                  nft -f - <<< "define RESOLVER_ADDRS = {$dns_servers}
table inet excludeTraffic {
  chain excludeDns {
    type filter hook output priority -10; policy accept;
    ip daddr \$RESOLVER_ADDRS udp dport 53 ct mark set 0x00000f41 meta mark set 0x6d6f6c65;
    ip daddr \$RESOLVER_ADDRS tcp dport 53 ct mark set 0x00000f41 meta mark set 0x6d6f6c65;
  }
}"
                  ;;
              down) $logger "Removing nftables exemptions for DNS entries";
                    nft delete table inet excludeTraffic;;
    esac;;
esac