使用单台设备作为网关,让整个局域网接入VPN网络

Posted by 橙叶 on Thu, Jun 23, 2022

为了躲避噪音,我把我的TrueNAS设备搬到了其他地方,需要依靠OpenVPN来连接TrueNAS。虽然TrueNAS提供了比较便捷的Web管理工具,但是为家里的每台设备都签发证书,就显得比较繁琐了,要是命名习惯不好,根本搞不清哪个配置文件用在了哪个设备上,更不用说有的设备并不支持OpenVPN客户端。

因此我希望在家庭局域网里,只用一台设备做网关连接OpenVPN Server,为整个局域网提供访问服务,家庭局域网里的设备只需要指定它为网关即可。如果再配合DHCP,局域网内的设备不做任何设置也可直接连接NAS。

(我用来做网关的设备是Rock Pi E,一个小型的ARM单板电脑,使用RK3389,属于是硬件大涨价时代所剩无几的能买得起的设备了。本来是作为软路由的设计的,可惜硬件限制只有一个千兆网口,这里我只用千兆网口做单臂路由)

当然这里只是用OpenVPN作为演示,并不仅限于OpenVPN。

安装的系统为Ubuntu 20.04。假设TrueNAS所在的LAN为192.168.4.0/24,OpenVPN子网为192.168.6.0/24,家庭网络为192.168.2.0/24。

Rock pi e的ip地址为192.168.2.10,使用的网口为eth1。

首先开启IP转发:

暂时生效:

echo 1 > /proc/sys/net/ipv4/ip_forward

永久生效:

1# 编辑 /etc/sysctl.conf
2vi /etc/sysctl.conf
3
4# 找到ipv4转发配置,并修改为1
5net.ipv4.ip_forward = 1
6
7# 使修改生效
8sysctl -p

接下来使用openvpn3命令行客户端连接openvpn服务器:

openvpn3 session-start --config ./openvpn_client.ovpn

然后执行ip addr,确认虚拟网卡名称,OpenVPN一般是tun0

file

配置iptables规则,这里使用NAT网关的方式,对来自eth1、目的地址为192.168.4.0/24的流量进行地址转换,然后发送到OpenVPN网络中。

1iptables -t nat -A POSTROUTING -d 192.168.4.0/24 -o tun0 -j MASQUERADE
2iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
3iptables -A FORWARD -i tun0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
4iptables -A FORWARD -i eth1 -o tun0 -j ACCEPT
5iptables -L
6iptables -S

完成配置后,其他设备将网关设为192.168.4.2,就可以访问VPN网络了。

你可以搭配pihole作为DNS服务器和DHCP服务器,在分配IP阶段就配置好网关,这样任何加入网络的设备都可以访问VPN网络而无需额外设置。

当然,以上只是一种实现方法,而且因为用了NAT,无法真正实现两个局域网间的“互通”。更多相关信息可以参考这篇文章:https://openvpn.net/vpn-server-resources/site-to-site-routing-explained-in-detail/

file



comments powered by Disqus