如何为 WireGuard VPN 配置 FreeNAS?

如何为 WireGuard VPN 配置 FreeNAS?

我有一个 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 的等效物是什么?

答案1

除了 WireGuard 之外,还可以使用 rc.conf 可调参数启用 FreeBSD 数据包过滤器 pf:

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

  • pf_enable="YES"

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

最后一组可调参数

  • iXsystems 建议wg0.conf/rootPost 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
    

最终脚本

我的pf.conf答案如下。WireGuard IP 地址在任意子网上是任意的。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 

(如果你的 ipv6 可以工作,请取消注释 ipv6 NAT)

我的 FreeNAS 服务器wg0.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 文档

相关内容