在CentOS上搭建VPN服务器是一个涉及多个步骤的过程,包括安装必要的软件、配置网络设置以及生成和管理证书等,以下是一个详细的指南,用于在CentOS系统上搭建OpenVPN服务器:
#### 一、准备工作
1. **更新系统**:确保你的CentOS系统是最新的,打开终端并运行以下命令来更新所有已安装的软件包和依赖项:
```bash
sudo dnf update y
```
2. **安装EPEL存储库**:OpenVPN和EasyRSA在默认的CentOS存储库中不可用,因此需要安装EPEL存储库,运行以下命令来安装它:
```bash
sudo dnf install epelrelease y
```
3. **安装OpenVPN和EasyRSA**:安装OpenVPN和EasyRSA(一种PKI管理工具):
```bash
sudo dnf install openvpn easyrsa y
```
4. **创建EasyRSA目录**:为EasyRSA创建一个新目录,并创建从/usr/share/easyrsa到该目录的符号链接:
```bash
mkdir ~/easyrsa
ln s /usr/share/easyrsa/3/* ~/easyrsa/
```
5. **设置目录权限**:确保目录的所有者是你的非root用户,并限制对该用户的访问:
```bash
sudo chown sammy:sammy ~/easyrsa
chmod 700 ~/easyrsa
```
#### 二、配置PKI
1. **编辑vars文件**:使用你喜欢的文本编辑器(如nano)编辑vars文件,以设置私钥和证书请求的参数:
```bash
cd ~/easyrsa
sudo nano vars
```
在文件中添加以下行:
```plaintext
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
```
保存并关闭文件。
2. **初始化PKI目录**:运行以下命令来初始化PKI目录:
```bash
./easyrsa initpki
```
3. **生成服务器私钥和证书签名请求(CSR)**:运行以下命令来生成服务器的私钥和CSR:
```bash
./easyrsa buildca
```
按照提示输入CA信息,完成后,运行以下命令来生成服务器的私钥和CSR:
```bash
./easyrsa genreq server nopass
```
4. **签署服务器证书**:使用CA签署服务器证书:
```bash
./easyrsa signreq server server
```
5. **生成DiffieHellman参数**:运行以下命令来生成DH参数:
```bash
openvpn genkey secret ta.key
```
6. **构建CRL**:运行以下命令来生成证书吊销列表(CRL):
```bash
./easyrsa gencrl
```
#### 三、配置OpenVPN服务器
1. **复制证书和密钥到OpenVPN目录**:将生成的证书和密钥复制到OpenVPN的适当目录中:
```bash
sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem /etc/openvpn/
```
2. **配置OpenVPN服务器**:编辑OpenVPN的主配置文件`/etc/openvpn/server.conf`,根据需要进行调整,一个基本的示例配置如下:
```plaintext
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfigpoolpersist ipp.txt
keepalive 10 120
cipher AES256CBC
user nobody
group nobody
persistkey
persisttun
status openvpnstatus.log
verb 3
```
请根据你的网络环境和需求调整这些设置,你可以更改端口号(默认为1194)、协议(UDP或TCP)以及加密算法等。
3. **启动OpenVPN服务**:运行以下命令来启动OpenVPN服务:
```bash
sudo systemctl start openvpn@server
```
为了确保OpenVPN在系统重启时自动启动,可以运行以下命令:
```bash
sudo systemctl enaBLe openvpn@server
```
#### 四、客户端配置
要让客户端连接到你的OpenVPN服务器,你需要将服务器的证书和密钥复制到客户端机器上,并配置客户端配置文件,以下是一个简单的客户端配置文件示例:
```plaintext
client
dev tun
proto udp
remote your_server_ip 1194
resolvretry infinite
nobind
persistkey
persisttun
remotecerttls server
cipher AES256CBC
verb 3
BEGIN CERTIFICATE
...(在这里粘贴你的CA证书)...
END CERTIFICATE
BEGIN CERTIFICATE
...(在这里粘贴你的客户端证书)...
END CERTIFICATE
BEGIN PRIVATE KEY
...(在这里粘贴你的客户端私钥)...
END PRIVATE KEY
BEGIN OpenVPN Static key V1
...(在这里粘贴你的TLS密钥)...
END OpenVPN Static key V1
```
将此配置文件保存为`client.ovpn`,并将其放在客户端机器上的某个位置,你可以使用OpenVPN客户端软件连接到服务器,在Windows上,你可以双击`client.ovpn`文件来启动连接;在Linux上,你可以使用以下命令:
```bash
sudo openvpn config client.ovpn
```
#### 五、常见问题与解答
Q1: 如果无法连接到VPN服务器怎么办?
A1: 确保服务器的防火墙允许OpenVPN流量(默认端口1194),你可能需要运行以下命令来允许流量:
```bash
sudo firewallcmd permanent addservice=openvpn
sudo firewallcmd reload
```
检查服务器日志(通常位于`/var/log/openvpn.log`或`/var/log/messages`)以获取有关连接问题的更多信息。
Q2: 如果客户端无法验证服务器证书怎么办?
A2: 确保你已正确复制服务器证书和CA证书到客户端配置文件中,检查服务器证书是否已过期或被吊销,如果问题仍然存在,尝试重新生成服务器证书和CA证书。
Q3: 如果遇到性能问题怎么办?
A3: OpenVPN使用加密来保护数据传输,这可能会对性能产生一定影响,如果你遇到性能问题,可以尝试更改加密算法(例如从AES256CBC改为AES128CBC)或调整其他配置参数以优化性能,降低加密强度可能会增加安全风险。
Q4: 如果需要远程访问内部网络资源怎么办?
A4: OpenVPN允许你通过VPN隧道安全地访问内部网络资源,确保你的内部网络路由设置正确,以便VPN客户端可以通过VPN隧道访问所需的资源,你可能需要在服务器上配置路由规则来实现这一点,你可以使用`iptables`来添加路由规则:
```bash
sudo iptables t nat A POSTROUTING s 10.8.0.0/8 o eth0 j MASQUERADE
sudo iptables A FORWARD m state state RELATED,ESTABLISHED j ACCEPT
sudo iptables A FORWARD s 10.8.0.0/8 d your_internal_network/24 j ACCEPT
```