Как настроить FreeNAS для WireGuard VPN?

У меня есть система FreeNAS 11.3, и я следовал инструкциям iXsystems по настройке WireGuard . С помощью простого wg0.conf я теперь могу успешно подключиться. Я хотел бы иметь возможность использовать эту настройку в качестве надлежащей VPN, что означает, что я могу использовать туннель для просмотра как в локальной сети, так и в Интернете.

В Linux решением является использование iptables ] для настройки NAT:

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Что такое эквивалент FreeNAS / FreeBSD?

2
задан 10 June 2020 в 04:43
1 ответ

В дополнение к WireGuard также включите фильтр пакетов FreeBSD pf с помощью настроек rc.conf:

  • wireguard_enable="YES"
  • wireguard_interfaces="wg0"

  • pf_enable="ДА"

  • pf_rules="/usr/local/etc/pf.conf"
  • pflog_enable="ДА"
  • gateway_enable="ДА"
  • ipv6_gateway_enable="ДА"

Final set of Tunables

  • iXsystems рекомендует wg0.conf жить в /root и сценарий Post Init, чтобы скопировать его в папку системы, а затем запустить WireGuard:

    mkdir -p /usr/local/ etc/wireguard && cp /root/wg0.conf /usr/local/etc/wireguard/wg0.conf && /usr/local/etc/rc.d/wireguard start
    

По умолчанию pf настраивается через /etc/pf.conf, но нам нужно следовать приведенному выше шаблону и скопировать /root/pf.conf в /usr /local/etc/pf.conf при запуске и пусть pf использует это.

  • Добавьте еще один скрипт Post Init для передачи нашей конфигурации:

    cp /root/pf.conf /usr/local/etc/pf.conf && service pf start
    

Final scripts

Мой pf.conf следует ниже. IP-адреса WireGuard произвольны в произвольной подсети. pf будет маршрутизировать и использовать NAT из этой подсети в остальную часть сети. Я не знаю, как это сделать без этих произвольных, но статических IP-адресов.

# Interfaces
ext_if = "igb0"
wireguard_if = "wg0"

# Wireguard Settings
wireguard_net_v4 = "192.168.222.0/24"
wireguard_net_v6 = "fc::0/64"

# Rules must be in order: options, normalization, queueing, translation, filtering

# Options
set skip on lo

# Translation
# Nat all wireguard to non-wireguard traffic
nat on $ext_if inet  from $wireguard_net_v4 to { any, !$wireguard_net_v4 } -> ($ext_if)
#nat on $ext_if inet6 from $wireguard_net_v6 to { any, !$wireguard_net_v6 } -> {$ext_if}

# Filtering
pass inet all
pass inet6 all 

(раскомментируйте NAT ipv6, если ваш ipv6 работает)

Файл wg0 моего сервера FreeNAS.conf:

[Interface]
PrivateKey = foofafi
ListenPort = 51820
Address = 192.168.222.1/32, fc::1/64

[Peer]
PublicKey = CLIENT1_PUBLIC_KEY
AllowedIPs = 192.168.222.2/32, fc::2/128

Конфигурация клиента ноутбука:

[Interface]
PrivateKey = blahblahblah
Address = 192.168.222.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = dynamicdns.example.com:51820
PersistentKeepalive = 25

Спасибо https://gist.github.com/apearson/168b244b4735cceff9809ef3d07f4df5 за почти рабочий конфиг!

См. также pf docs и это.

1
ответ дан 10 June 2020 в 01:38

Теги

Похожие вопросы