个人工具

“UbuntuHelp:OpenVPN/zh”的版本间的差异

来自Ubuntu中文

跳转至: 导航, 搜索
 
(未显示同一用户的1个中间版本)
第10行: 第10行:
  
 
=== 系统的安装与配置 ===
 
=== 系统的安装与配置 ===
An understanding of the Linux networking stack is necessary.
+
对于 Linux 网络协议栈的理解是必不可少的. 下面这个例子是使用安装了Ubuntu Jeos 8.04的开源虚拟机(KVM)的环境下完成的 (可以很容易的在一个独立的安装了 ubuntu 服务器的电脑中完成). 在我的配置中,eth0 连接到互联网,eth1连接到局域网,将在它们之间建立桥接. .
This example installation was performed using Ubuntu Jeos 8.04 in a KVM virtual machine (but could just have easily been performed on a standalone Ubuntu Server). In my configuration eth0 is connected to the Internet and eth1 is connected to the LAN network that will be bridged. Comments in configuration files are preceeded by two pound signs (##).
+
 
==== 服务器的安装 ====
 
==== 服务器的安装 ====
Install OpenVPN:  
+
安装 OpenVPN:  
 
<pre><nowiki>
 
<pre><nowiki>
 
sudo apt-get install openvpn bridge-utils
 
sudo apt-get install openvpn bridge-utils
 
</nowiki></pre>
 
</nowiki></pre>
 
===== 配置桥接器 =====
 
===== 配置桥接器 =====
* Edit /etc/network/interfaces
+
* 编辑 /etc/network/interfaces
When a Linux server is behind a NAT firewall, the /etc/network/interfaces file commonly looks like
+
当一个 Linux 服务器开启了防火墙, 文件 /etc/network/interfaces 可能是:
 
<pre><nowiki>
 
<pre><nowiki>
 
# This file describes the network interfaces available on your system
 
# This file describes the network interfaces available on your system
第35行: 第34行:
  
 
</nowiki></pre>
 
</nowiki></pre>
Edit this and add a bridge interface:
+
编辑它并添加一个桥接端口:
 
<pre><nowiki>  
 
<pre><nowiki>  
 
sudo nano /etc/network/interfaces
 
sudo nano /etc/network/interfaces
 
</nowiki></pre>
 
</nowiki></pre>
so that it look similar to:
+
然后它看起来可能是:
 
<pre><nowiki>
 
<pre><nowiki>
  
第58行: 第57行:
 
   down ifconfig $IFACE down  
 
   down ifconfig $IFACE down  
 
</nowiki></pre>
 
</nowiki></pre>
* If you are running Linux inside a virtual machine, you may want to add the following parameters to the bridge connection:
+
* 如果你在一个虚拟机中运行 Linux, 你需要对桥接连接补充以下参数:
 
<pre><nowiki>
 
<pre><nowiki>
 
   bridge_fd 9      ## from the libvirt docs (forward delay time)
 
   bridge_fd 9      ## from the libvirt docs (forward delay time)
第65行: 第64行:
 
   bridge_stp off  ## from the libvirt docs (spanning tree protocol)
 
   bridge_stp off  ## from the libvirt docs (spanning tree protocol)
 
</nowiki></pre>
 
</nowiki></pre>
* Restart networking:
+
* 重启网络:
 
<pre><nowiki>
 
<pre><nowiki>
 
sudo /etc/init.d/networking restart
 
sudo /etc/init.d/networking restart
 
</nowiki></pre>
 
</nowiki></pre>
The bridging decelerations come from the libvirt documentation. (I really only understand the bridge_ports directive and the bridge_stp directive. Please add more instructions here.)
+
桥接从 libvirt 文件开始减速. (我真的只认识 bridge_ports 指令和 bridge_stp 指令.请添加更多的说明.)
 
===== 证书的认证 =====
 
===== 证书的认证 =====
* Generate certificates for the server. In order to do this I will setup my own Certificate Authority using the provided easy-rsa scripts in the /usr/share/doc/openvpn/examples/easy-rsa/ directory. Another alternative is using the graphical program tinyca to create your CA.   
+
* 服务器证书的认证. 为此我将使用我自己的证书颁发机构提供的 easy-rsa 脚本目录 /usr/share/doc/openvpn/examples/easy-rsa/ . 另一个选择是使用图形界面的 tinyca 去建立你自己的证书(CA).   
Step 1:
+
1 :
Copy files to the /etc/openvpn/easy-rsa/ directory
+
复制文件到 /etc/openvpn/easy-rsa/  
 
<pre><nowiki>
 
<pre><nowiki>
 
sudo mkdir /etc/openvpn/easy-rsa/  
 
sudo mkdir /etc/openvpn/easy-rsa/  
 
sudo cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/  
 
sudo cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/  
 
</nowiki></pre>
 
</nowiki></pre>
Step 2:
+
2 :
Edit /etc/openvpn/easy-rsa/vars
+
编辑 /etc/openvpn/easy-rsa/vars
 
<pre><nowiki>
 
<pre><nowiki>
 
sudo vi /etc/openvpn/easy-rsa/vars
 
sudo vi /etc/openvpn/easy-rsa/vars
 
</nowiki></pre>
 
</nowiki></pre>
Change these lines at the bottom so that they reflect your new CA.
+
在选项位置使用你的新CA更改下列项:
 
<pre><nowiki>
 
<pre><nowiki>
 
export KEY_COUNTRY="US"
 
export KEY_COUNTRY="US"
第91行: 第90行:
 
export KEY_EMAIL="me@myhost.mydomain"
 
export KEY_EMAIL="me@myhost.mydomain"
 
</nowiki></pre>
 
</nowiki></pre>
Step 3:
+
3 :
Setup the CA and create the first server certificate
+
安装你的CA和创建第一个服务器证书
 
<pre><nowiki>
 
<pre><nowiki>
  
第108行: 第107行:
  
 
     </nowiki></pre>
 
     </nowiki></pre>
The Certificate Authority is now setup and the needed keys are in /etc/openvpn/
+
证书机构已经建立,其所需的密钥在 /etc/openvpn/ 目录中
 
===== 服务器的配置 =====
 
===== 服务器的配置 =====
By default all servers specified in *.conf files in the /etc/openvpn/ directory are started on boot. Therefore, all we have to do is creating a new file named server.conf in the /etc/openvpn/ directory.   
+
默认为所有服务器从指定的 /etc/openvpn/ 中的 *.conf 文件开始启动. 因此, 我们只需要在 /etc/openvpn/ 中创建一个新的 server.conf 文件.   
First, we're going to create a couple of new scripts to be used by the openvpn server.
+
首先,我们将创建一个针对openvpn服务器使用的新脚本.
 
<pre><nowiki>
 
<pre><nowiki>
 
sudo vi /etc/openvpn/up.sh
 
sudo vi /etc/openvpn/up.sh
 
</nowiki></pre>
 
</nowiki></pre>
This script should contain the following
+
新脚本需像下面这样:
 
<pre><nowiki>
 
<pre><nowiki>
 
#!this bogus line has been added so the following line will display properly!
 
#!this bogus line has been added so the following line will display properly!
第126行: 第125行:
 
/usr/sbin/brctl addif $BR $DEV
 
/usr/sbin/brctl addif $BR $DEV
 
</nowiki></pre>
 
</nowiki></pre>
Now, we'll create a "down" script.
+
现在,我们要建立一个 "down" 脚本.
 
<pre><nowiki>
 
<pre><nowiki>
 
sudo vi /etc/openvpn/down.sh
 
sudo vi /etc/openvpn/down.sh
 
</nowiki></pre>
 
</nowiki></pre>
It should contain the following.
+
像下面这样:
 
<pre><nowiki>
 
<pre><nowiki>
 
#!this bogus line has been added so the following line will display properly!
 
#!this bogus line has been added so the following line will display properly!
第141行: 第140行:
 
/sbin/ifconfig $DEV down
 
/sbin/ifconfig $DEV down
 
</nowiki></pre>
 
</nowiki></pre>
Now, make both scripts executable.
+
然后,给两个脚本加上执行权限.
 
<pre><nowiki>
 
<pre><nowiki>
 
sudo chmod +x /etc/openvpn/up.sh /etc/openvpn/down.sh
 
sudo chmod +x /etc/openvpn/up.sh /etc/openvpn/down.sh
 
</nowiki></pre>
 
</nowiki></pre>
And now on to configuring openvpn itself.
+
现在配置 openvpn.
 
<pre><nowiki>
 
<pre><nowiki>
 
sudo vi /etc/openvpn/server.conf
 
sudo vi /etc/openvpn/server.conf
第191行: 第190行:
 
verb 3
 
verb 3
 
</nowiki></pre>
 
</nowiki></pre>
Don't forget to either reboot or run the command below. This will restart openvpn and load the new config.
+
别忘了重新启动或运行下面的命令. 这将重新启动openvpn和加载新的配置.
 
<pre><nowiki>
 
<pre><nowiki>
 
sudo /etc/init.d/openvpn restart
 
sudo /etc/init.d/openvpn restart
 
</nowiki></pre>
 
</nowiki></pre>
 
==== 客户端的连接 ====
 
==== 客户端的连接 ====
This section concerns creating client certificate and key files and setting up a client configuration fileThe files can then be used with OpenVPN on a client platform. The described configuration will work with OpenVPN installations of [http://openvpn.se/ OpenVPN GUI] for Windows and [http://code.google.com/p/tunnelblick/ Tunnelblick] for Mac OS X clients. For a detailed discussion of each, refer to their respective home pages. It should also be compatible with Linux OpenVPN clients.
+
这部分涉及到创建客户端证书和密钥文件并设置一个客户端配置文件文件将被用在客户端平台的 OpenVPN . 所描述的配置文件将被用在 OpenVPN 安装包 [http://openvpn.se/ OpenVPN GUI] for Windows 用户和 [http://code.google.com/p/tunnelblick/ Tunnelblick] for Mac OS X 用户. 详细的说明参考它们各自的网页.它也兼容 OpenVPN 用户.
 
===== 生成密钥和证书 =====
 
===== 生成密钥和证书 =====
Generating certificates and keys for a client is very similar to the process used for generating server certificates. It is assumed that you have already set up the <code><nowiki>/etc/openvpn/easy-rsa/</nowiki></code> directory and updated the <code><nowiki>/etc/openvpn/easy-rsa/vars</nowiki></code> file as described aboveYou should have already setup your Certificate Authority and created a server certificate and keys.
+
客户端的证书和服务器端的生成过程是类似的.这里假定你已建立 <code><nowiki>/etc/openvpn/easy-rsa/</nowiki></code> 目录和更新 <code><nowiki>/etc/openvpn/easy-rsa/vars</nowiki></code> 文件,像上面描述的一样你应该已经设置好了您的证书颁发机构,创建了一个服务器的证书和密钥.
 
<pre><nowiki>
 
<pre><nowiki>
 
cd /etc/openvpn/easy-rsa/ ## move to the easy-rsa directory
 
cd /etc/openvpn/easy-rsa/ ## move to the easy-rsa directory
第205行: 第204行:
 
</nowiki></pre>
 
</nowiki></pre>
 
===== 客户端的配置 =====
 
===== 客户端的配置 =====
The client configuration has been adapted from the OpenVPN 2.0 sample configuration file. For Windows, the file should be named client.ovpn and for other operating systems, the file should be named client.conf.  The file can be created using vi or other editor that can create plain text files.
+
客户端的配置是改编自 OpenVPN 2.0 样本配置文件. 对于 Windows 用户, 文件必须命名为 client.ovpn 对于其他的操作系统, 文件需命名为 client.conf.  可以用 vi 创建或者其他文本编辑器创建.
The configuration file assumes that there is only one TUN/TAP device configured on the client.
+
假定客户端配置文件只有一个 TUN/TAP 设备被配置.
 
<pre><nowiki>
 
<pre><nowiki>
  
第249行: 第248行:
  
 
</nowiki></pre>
 
</nowiki></pre>
Place the client.ovpn (or client.conf) configuration file along with the certificate and key files in the openvpn configuration directory on the client. With the above setup, the following files should be in the configuration directory.
+
把客户端的 client.ovpn (或者 client.conf) 配置文件和证书与密钥文件一起放在 openvpn 配置目录. 上面的建立后,下面的这些文件也需要放在配置目录中.
 
<pre><nowiki>
 
<pre><nowiki>
 
client.ovpn
 
client.ovpn
第257行: 第256行:
 
ta.key
 
ta.key
 
</nowiki></pre>
 
</nowiki></pre>
(For the [http://openvpn.se/ OpenVPN GUI] for Windows, the default location for the files is <code><nowiki>C:\Program Files\OpenVPN\config</nowiki></code>.)
+
(对于 [http://openvpn.se/ OpenVPN GUI] for Windows用户, 文件默认位置是 <code><nowiki>C:\Program Files\OpenVPN\config</nowiki></code>.)
(For [http://code.google.com/p/tunnelblick/ Tunnelblick] for Mac OS X, the default location for the files is ''<code><nowiki>~username</nowiki></code>''<code><nowiki>/Library/openvpn</nowiki></code>.
+
(对于 [http://code.google.com/p/tunnelblick/ Tunnelblick] for Mac OS X用户, 文件默认位置是 ''<code><nowiki>~username</nowiki></code>''<code><nowiki>/Library/openvpn</nowiki></code>.
 
''
 
''
 
==== 为 OpenVPN 配置 Firestarter  ====
 
==== 为 OpenVPN 配置 Firestarter  ====
Firestarter requires some configuration on both client and server machines to allow services like SAMBA over a VPN tunnel. In addition the creation of rules within the GUI, it was also necessary to edit the /etc/firestarter/user-pre file. I used the instructions found here:  
+
Firestarter 需要在客户端和服务器端进行一些配置,来允许服务像 SAMBA 通过 VPN 信道.此外建立GUI界面时,还需要编辑 /etc/firestarter/user-pre 文件. 我用的这些说明摘自:  
 
http://www.howtoadvice.com/FirestarterVPN/
 
http://www.howtoadvice.com/FirestarterVPN/
Also, though the tutorial didn't discuss it,  I found it necessary to save the original user-pre file as a copy, then rename the original and rename the copy to user-pre due to permissions issues.
+
此外,虽然教程不讨论它,我认为有必要保存原始user-pre文件副本,然后由于权限的问题重命名原始文件和重命名复制文件到user-pre.
 
=== 其他资源 ===
 
=== 其他资源 ===
* Consult the official [http://openvpn.net/howto.html OpenVPN Howto].
+
* 查阅官方文件 [http://openvpn.net/howto.html OpenVPN Howto].
* Consult [http://www.juanpablo.netne.net/index.php/en/manuales-linux/red-privada-virtual-openvpn/item/58 this tutorial].  
+
* 查阅 [http://www.juanpablo.netne.net/index.php/en/manuales-linux/red-privada-virtual-openvpn/item/58 this tutorial].  
* Consult [http://ubuntuguide.org/wiki/OpenVPN_server Ubuntuguide -- OpenVPN server installation]
+
* 查阅 [http://ubuntuguide.org/wiki/OpenVPN_server Ubuntuguide -- OpenVPN server installation]
 +
* 英文不佳,有错误请更改,另外关于防火墙方面请参考原文.
  
 
[[category:UbuntuHelp]]
 
[[category:UbuntuHelp]]

2011年9月5日 (一) 19:36的最新版本

介绍/概况

更新说明可以查询 the Ubuntu 9.10 Server guide (Karmic Koala) -- OpenVPN.

概况

OpenVPN 是由ubuntu库提供的私人虚拟网络(VPN)解决方案. 具有灵活,易用,可靠,安全的特点. 这些说明是使用x509证书建立一个VPN桥接和一般管理任务.

什么是 VPN 桥接 ?

VPN 桥接技术允许在客户看起来好像他们是在同一局域网(LAN)的服务器系统. VPN 使用结合虚拟设备来完成这项任务 -- 一些人称之为"桥接",另一些则称之为"tap device". Tap device就像一个虚拟以太网适配器和桥接设备一样工作,还有就是虚拟集线器. 当你桥接到一个物理以太网设备和tap device时, 必不可少的是创造一个物理网络和远程客户之间的集线器. 因此,所有网络服务(LAN services)对远程客户都是可见的.

系统的安装与配置

对于 Linux 网络协议栈的理解是必不可少的. 下面这个例子是使用安装了Ubuntu Jeos 8.04的开源虚拟机(KVM)的环境下完成的 (可以很容易的在一个独立的安装了 ubuntu 服务器的电脑中完成). 在我的配置中,eth0 连接到互联网,eth1连接到局域网,将在它们之间建立桥接. .

服务器的安装

安装 OpenVPN:

sudo apt-get install openvpn bridge-utils
配置桥接器
  • 编辑 /etc/network/interfaces

当一个 Linux 服务器开启了防火墙, 文件 /etc/network/interfaces 可能是:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth0
iface lo inet loopback

# The primary network interface
iface eth0 inet static
  address 192.168.1.10
  netmask 255.255.255.0
  gateway 192.168.1.1

编辑它并添加一个桥接端口:

 
sudo nano /etc/network/interfaces

然后它看起来可能是:


auto lo br0

iface lo inet loopback

iface br0 inet static 
  address 192.168.1.10 
  netmask 255.255.255.0
  gateway 192.168.1.1
  bridge_ports eth0

iface eth0 inet manual
  up ifconfig $IFACE 0.0.0.0 up
  up ip link set $IFACE promisc on
  down ip link set $IFACE promisc off
  down ifconfig $IFACE down 
  • 如果你在一个虚拟机中运行 Linux, 你需要对桥接连接补充以下参数:
  bridge_fd 9      ## from the libvirt docs (forward delay time)
  bridge_hello 2   ## from the libvirt docs (hello time)
  bridge_maxage 12 ## from the libvirt docs (maximum message age)
  bridge_stp off   ## from the libvirt docs (spanning tree protocol)
  • 重启网络:
sudo /etc/init.d/networking restart

桥接从 libvirt 文件开始减速. (我真的只认识 bridge_ports 指令和 bridge_stp 指令.请添加更多的说明.)

证书的认证
  • 服务器证书的认证. 为此我将使用我自己的证书颁发机构提供的 easy-rsa 脚本目录 /usr/share/doc/openvpn/examples/easy-rsa/ . 另一个选择是使用图形界面的 tinyca 去建立你自己的证书(CA).

第 1 步: 复制文件到 /etc/openvpn/easy-rsa/

sudo mkdir /etc/openvpn/easy-rsa/ 
sudo cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ 

第 2 步: 编辑 /etc/openvpn/easy-rsa/vars

sudo vi /etc/openvpn/easy-rsa/vars

在选项位置使用你的新CA更改下列项:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

第 3 步: 安装你的CA和创建第一个服务器证书


cd /etc/openvpn/easy-rsa/ ## move to the easy-rsa directory
sudo chown -R root:admin .  ## make this directory writable by the system administrators
sudo chmod g+w . ## make this directory writable by the system administrators
source ./vars ## execute your new vars file
./clean-all  ## Setup the easy-rsa directory (Deletes all keys)
./build-dh  ## takes a while consider backgrounding
./pkitool --initca ## creates ca cert and key
./pkitool --server server ## creates a server cert and key
cd keys
openvpn --genkey --secret ta.key  ## Build a TLS key
sudo cp server.crt server.key ca.crt dh1024.pem ta.key ../../

    

证书机构已经建立,其所需的密钥在 /etc/openvpn/ 目录中

服务器的配置

默认为所有服务器从指定的 /etc/openvpn/ 中的 *.conf 文件开始启动. 因此, 我们只需要在 /etc/openvpn/ 中创建一个新的 server.conf 文件. 首先,我们将创建一个针对openvpn服务器使用的新脚本.

sudo vi /etc/openvpn/up.sh

新脚本需像下面这样:

#!this bogus line has been added so the following line will display properly!
#!/bin/sh

BR=$1
DEV=$2
MTU=$3
/sbin/ifconfig $DEV mtu $MTU promisc up
/usr/sbin/brctl addif $BR $DEV

现在,我们要建立一个 "down" 脚本.

sudo vi /etc/openvpn/down.sh

像下面这样:

#!this bogus line has been added so the following line will display properly!
#!/bin/sh

BR=$1
DEV=$2

/usr/sbin/brctl delif $BR $DEV
/sbin/ifconfig $DEV down

然后,给两个脚本加上执行权限.

sudo chmod +x /etc/openvpn/up.sh /etc/openvpn/down.sh

现在配置 openvpn.

sudo vi /etc/openvpn/server.conf
mode server
tls-server

local <your ip address> ## ip/hostname of server
port 1194 ## default openvpn port
proto udp



#bridging directive
dev tap0 ## If you need multiple tap devices, add them here
up "/etc/openvpn/up.sh br0"
down "/etc/openvpn/down.sh br0"

persist-key
persist-tun

#certificates and encryption
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
tls-auth ta.key 0 # This file is secret

cipher BF-CBC        # Blowfish (default)
comp-lzo

#DHCP Information
ifconfig-pool-persist ipp.txt
server-bridge 192.168.1.10 255.255.255.0 192.168.1.100 192.168.1.110
push "dhcp-option DNS your.dns.ip.here"
push "dhcp-option DOMAIN yourdomain.com"
max-clients 10 ## set this to the max number of clients that should be connected at a time

#log and security
user nobody
group nogroup
keepalive 10 120
status openvpn-status.log
verb 3

别忘了重新启动或运行下面的命令. 这将重新启动openvpn和加载新的配置.

sudo /etc/init.d/openvpn restart

客户端的连接

这部分涉及到创建客户端证书和密钥文件并设置一个客户端配置文件. 文件将被用在客户端平台的 OpenVPN 中. 所描述的配置文件将被用在 OpenVPN 安装包 OpenVPN GUI for Windows 用户和 Tunnelblick for Mac OS X 用户. 详细的说明参考它们各自的网页.它也兼容 OpenVPN 用户.

生成密钥和证书

客户端的证书和服务器端的生成过程是类似的.这里假定你已建立 /etc/openvpn/easy-rsa/ 目录和更新 /etc/openvpn/easy-rsa/vars 文件,像上面描述的一样. 你应该已经设置好了您的证书颁发机构,创建了一个服务器的证书和密钥.

cd /etc/openvpn/easy-rsa/ ## move to the easy-rsa directory
source ./vars             ## execute the vars file
./pkitool client          ## create a cert and key named "client"
客户端的配置

客户端的配置是改编自 OpenVPN 2.0 样本配置文件. 对于 Windows 用户, 文件必须命名为 client.ovpn 对于其他的操作系统, 文件需命名为 client.conf. 可以用 vi 创建或者其他文本编辑器创建. 假定客户端配置文件只有一个 TUN/TAP 设备被配置.


# Specify that this is a client
client

# Bridge device setting
dev tap

# Host name and port for the server (default port is 1194)
# note: replace with the correct values your server set up
remote your.server.example.com 1194

# Client does not need to bind to a specific local port
nobind


# Keep trying to resolve the host name of OpenVPN server.
resolv-retry infinite

# Preserve state across restarts
persist-key
persist-tun

# SSL/TLS parameters - files created previously
ca ca.crt
cert client.crt
key client.key

# Since we specified the tls-auth for server, we need it for the client
# note: 0 = server, 1 = client
tls-auth ta.key 1

# Specify same cipher as server
cipher BF-CBC

# Use compression
comp-lzo

# Log verbosity (to help if there are problems)
verb 3

把客户端的 client.ovpn (或者 client.conf) 配置文件和证书与密钥文件一起放在 openvpn 配置目录. 上面的建立后,下面的这些文件也需要放在配置目录中.

client.ovpn
ca.crt
client.crt
client.key
ta.key

(对于 OpenVPN GUI for Windows用户, 文件默认位置是 C:\Program Files\OpenVPN\config.) (对于 Tunnelblick for Mac OS X用户, 文件默认位置是 ~username/Library/openvpn.

为 OpenVPN 配置 Firestarter

Firestarter 需要在客户端和服务器端进行一些配置,来允许服务像 SAMBA 通过 VPN 信道.此外建立GUI界面时,还需要编辑 /etc/firestarter/user-pre 文件. 我用的这些说明摘自: http://www.howtoadvice.com/FirestarterVPN/ 此外,虽然教程不讨论它,我认为有必要保存原始user-pre文件副本,然后由于权限的问题重命名原始文件和重命名复制文件到user-pre.

其他资源