arch搭建openvpn服务端(二层路由和三层路由)

E= γ mc² Lv2

archlinux搭建openvpn服务端

配置网络

这里使用systemd-network管理网络(尝试过NetworkManager,失败了)

配置网络接口

已有的网口

设置进桥接

1
2
3
4
5
6
7
/etc/systemd/network/20-wired.network
----------
[Match]
Name=ens34

[Network]
Bridge=br0

给openvpn的tap接口

1
2
3
4
5
6
7
8
9
/etc/systemd/network/30-tap0.netdev
----------
[NetDev]
Name=tap0
Kind=tap

[Tap]
User=nobody
Group=nobody

桥接接口

1
2
3
4
5
/etc/systemd/network/35-br0.netdev
----------
[NetDev]
Name=br0
Kind=bridge

配置网络

tap接口进桥接

1
2
3
4
5
6
7
/etc/systemd/network/30-tap0.network
----------
[Match]
Name=tap0

[Network]
Bridge=br0

桥接接口设置网络连接

我这里设置ipv4设置成静态ip,网络指向旁路由192.168.1.50,你可以根据自己的具体网络环境设置

ipv6设置成dhcpv6获取

1
2
3
4
5
6
7
8
9
10
/etc/systemd/network/35-br0.network
----------
[Match]
Name=br0

[Network]
Address=192.168.1.3/24
Gateway=192.168.1.50
DNS=192.168.1.50
DHCP=ipv6

切换到新的网络配置

1
sudo systemctl restart systemd-networkd.service

设置ddns

这里使用godns作为ddns的程序,你可以根据自己的喜好进行选择请先设置好archlinuxcn源来安装yay或者paru

安装godns

1
paru -S godns-bin

配置godns

我的域名在Cloudflare,所以我的配置大致如下你需要根据自己的实际情况来进行配置,请参考godns的项目readme

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
32
/home/ayaya/godns_config.json
----------
{
"run_once": true,
"provider": "Cloudflare",
"login_token": "",
"domains": [
{
"domain_name": "",
"sub_domains": [""]
}
],
"resolver": "192.168.1.50",
"ipv6_urls": [
"http://api-ipv6.ip.sb",
"http://api6.ipify.org",
"http://ip1.dynupdate6.no-ip.com"
],
"ip_type": "IPv6",
"interval": 300,
"notify": {
"mail": {
"enabled": true,
"smtp_server": "",
"smtp_username": "",
"smtp_password": "",
"smtp_port": 587,
"send_from": "",
"send_to": ""
}
}
}

设置定时运行

我这里使用systemd-timer

运行用的服务

1
2
3
4
5
6
/usr/lib/systemd/system/godns.service
----------
[Unit]

[Service]
ExecStart=/bin/godns -c /home/ayaya/godns_config.json

定时触发服务的服务

1
2
3
4
5
6
7
8
9
10
11
12
13
/usr/lib/systemd/system/godns.timer
----------
[Unit]

[Timer]
OnBootSec=5m
OnCalendar=*-*-* 1:00:00
OnUnitActiveSec=5m
OnUnitInactiveSec=5m
Unit=godns.service

[Install]
WantedBy=multi-user.target

启动服务

1
2
sudo systemctl enable --now godns.service
sudo systemctl enable --now godns.timer

获取openvpn所需的的证书

安装easy-rsa

1
sudo pacman -S easy-rsa

生成证书

参考Easy-RSA - ArchWiki (archlinux.org)

首先先创建一个文件夹,用于存放证书

1
2
sudo mkdir /etc/openvpn/openvpn证书
cd /etc/openvpn/openvpn证书

生成ca证书

1
2
sudo easyrsa init-pki
sudo easyrsa build-ca nopass

生成服务器证书

这里设置服务器名称为arch,你可以自己选择其他名称

1
sudo easyrsa build-server-full arch nopass

生成Diffie-Hellman (DH) 参数文件

1
sudo easyrsa gen-dh

生成客户端证书

这里我只生成一个,名称设置为surface,你可以根据自己的情况生成一个或多个证书

1
sudo easyrsa build-client-full surface nopass

设置openvpn服务端

l2 vpn配置

设置ip分配

这里我选择使用静态分配地址

创建文件夹

1
2
sudo mkdir /etc/openvpn/ccd-tap
sudo touch /etc/openvpn/ccd-tap/surface

分配ip

1
2
3
/etc/openvpn/ccd-tap/surface
----------
ifconfig-push 192.168.1.4 255.255.255.0

openvpn的配置

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
/etc/openvpn/server/archtap.conf
----------
port 10001
proto udp6
dev tap0
server-bridge

ca /etc/openvpn/openvpn证书/pki/ca.crt
cert /etc/openvpn/openvpn证书/pki/issued/arch.crt
key /etc/openvpn/openvpn证书/pki/private/arch.key
dh /etc/openvpn/openvpn证书/pki/dh.pem

client-config-dir /etc/openvpn/ccd-tap

push "route 192.168.1.0 255.255.255.0 192.168.1.50"
push "dhcp-option DNS 192.168.1.50"

topology subnet
client-to-client

keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
verb 3

启动openvpn服务

1
sudo systemctl enable --now openvpn-server@archtun.service

l3 vpn

设置ip分配

这里我选择使用静态分配地址

创建文件夹

1
2
sudo mkdir /etc/openvpn/ccd-tun
sudo touch /etc/openvpn/ccd-tun/surface

分配ip,这里给openvpn的客户端分配了192.168.12.0网段

1
2
3
/etc/openvpn/ccd-tun/surface
----------
ifconfig-push 192.168.12.4 255.255.255.0

openvpn的配置

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
/etc/openvpn/server/archtun.conf
----------
port 10002
proto udp6
dev tun0

ca /etc/openvpn/openvpn证书/pki/ca.crt
cert /etc/openvpn/openvpn证书/pki/issued/arch.crt
key /etc/openvpn/openvpn证书/pki/private/arch.key
dh /etc/openvpn/openvpn证书/pki/dh.pem

topology subnet
client-to-client

push "redirect-gateway local def1"
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.50"

client-config-dir /etc/openvpn/ccd-tun

server 192.168.12.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
verb 3

其中push "redirect-gateway local def1"这行配置是为了把客户端的全部网络代理到服务端,你可以根据自己的需要选择是否使用

设置防火墙以允许客户端访问同网段的其他设备sudo iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -o br0 -j MASQUERADE

启动openvpn服务

1
sudo systemctl enable --now openvpn-server@archtun.service

编写openvpn客户端配置

l2 vpn

注意,只有linux和windows支持l2 vpn
windows客户端需要选择openvpn gui而不是openvpn connect

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
surface-tap.ovpn
----------
client
remote <ddns绑定的域名> 10001 udp
dev tap0
pull

nobind
persist-key
persist-tun
verb 2
<ca>

#把/etc/openvpn/openvpn证书/pki/ca.crt的内容放这里

</ca>
<cert>

#把/etc/openvpn/openvpn证书/pki/issued/surface.crt的内容放这里

</cert>
<key>

#把/etc/openvpn/openvpn证书/pki/private/surface.key的内容放这里

</key>
comp-lzo

l3 vpn

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
surface-tun.ovpn
----------
client
remote <ddns绑定的域名> 10001 udp
dev tun0
pull

nobind
persist-key
persist-tun
verb 2
<ca>

#把/etc/openvpn/openvpn证书/pki/ca.crt的内容放这里

</ca>
<cert>

#把/etc/openvpn/openvpn证书/pki/issued/surface.crt的内容放这里

</cert>
<key>

#把/etc/openvpn/openvpn证书/pki/private/surface.key的内容放这里

</key>
comp-lzo
  • 标题: arch搭建openvpn服务端(二层路由和三层路由)
  • 作者: E= γ mc²
  • 创建于 : 2024-05-12 21:59:54
  • 更新于 : 2024-09-06 15:21:28
  • 链接: https://redefine.ohevan.com/2024/05/12/arch搭建openvpn服务端-二层路由和三层路由/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论