6、客户端 - 服务器纯 IP 网络配置指南

客户端 - 服务器纯 IP 网络配置指南

1. 特殊路由与 VPN 网关

vpn_gateway 是一个特殊的网关,代表着 VPN 网关地址。若要添加一条路由,明确地将特定子网的流量通过 VPN 隧道传输,覆盖任何本地路由,可以添加如下选项:

route 10.198.0.0 255.255.0.0 vpn_gateway
2. 重定向 IPv6 默认网关

随着 IPv6 网络的出现,设置一个能同时保护 IPv4 和 IPv6 流量的 VPN 变得愈发重要。若仅通过 VPN 隧道保护 IPv4 流量,那么 IPv6 流量仍可能泄露。下面介绍如何设置 OpenVPN 来保护所有 IPv6 流量,此功能从 OpenVPN 2.4 版本开始支持。
- 准备工作
- 网络布局与服务器端路由配置的布局相同。
- 使用本章第一个配置创建的 PKI 文件。
- 在两台计算机上安装 OpenVPN 2.4 或更高版本,并确保它们通过网络连接。例如,服务器计算机运行 CentOS 6 Linux 和 OpenVPN 2.4,客户端运行 Fedora 20 Linux 和 OpenVPN 2.4。
- 服务器准备好添加 IPv6 支持配置中的 example2 - 4 - server.conf 文件;客户端准备好服务器端路由配置中的 basic - udp - client.conf 文件。
- 操作步骤
1. 在 example2 - 4 - server.conf 文件中添加一行内容来创建服务器配置文件:

push "redirect - gateway ipv6 !ipv4"

保存为 example2 - 8 - server.conf
2. 启动服务器:

[root@server]# openvpn --config example2 - 8 - server.conf
3. 在另一个服务器终端中,启用 IP 流量转发:
[root@server]# sysctl -w net.ipv6.conf.all.forwarding = 1
4. 启动客户端:
[root@client]# openvpn --config basic - udp - client.conf

客户端会输出如下内容:

add_route_ipv6(::/3 -> 2001:db8:100::1 metric -1) dev tun1
add_route_ipv6(2000::/4 -> 2001:db8:100::1 metric -1) dev tun1
add_route_ipv6(3000::/4 -> 2001:db8:100::1 metric -1) dev tun1
add_route_ipv6(fc00::/7 -> 2001:db8:100::1 metric -1) dev tun1
Initialization Sequence Completed
  • 工作原理
    当客户端连接到 OpenVPN 服务器时,服务器会向客户端推送一条特殊的重定向语句:
push "redirect - gateway ipv6 !ipv4"

其中, ipv6 标志告知 OpenVPN 客户端通过向客户端操作系统添加三条路由,将所有 IPv6 流量重定向到隧道:

2000::/4
3000::/4
fc00::/4

这样就有效地将所有 IPv6 流量重定向到 VPN 隧道。而 !ipv4 标志则告知 OpenVPN 客户端不要重定向 IPv4 流量,此示例添加该标志是为了展示仅重定向 IPv6 流量的可能性。

  • 其他方法
    也可以通过在服务器配置文件中添加以下行来实现相同的效果:
push "route - ipv6 2000::/4"
push "route - ipv6 3000::/4"
push "route - ipv6 fc00::/4"

此方法在 OpenVPN 2.3 中也支持。但需要注意的是,如果服务器的 IPv6 地址与上述任何地址处于同一范围,那么此设置将会失败,因为所有上述 IPv6 网络的流量都将被重定向到隧道。为解决此问题,OpenVPN 2.4 引入了 ipv6 标志。

3. 使用 ifconfig - pool 块

此方法用于将普通 VPN 客户端与管理型 VPN 客户端分开,这样便于为管理用户设置不同的防火墙规则。
- 准备工作
- 使用本章第一个配置创建的 PKI 文件。
- 在两台计算机上安装 OpenVPN 2.3.9 或更高版本,并确保它们通过网络连接。例如,服务器计算机运行 CentOS 6 Linux 和 OpenVPN 2.3.9,普通 VPN 客户端运行 Windows 7 64 位和 OpenVPN 2.3.11,被分配到 192.168.200.0 网络;管理型 VPN 客户端运行 Fedora 20 Linux 和 OpenVPN 2.3.9,位于 192.168.202.0 网络。
- 准备好服务器端路由配置中的 basic - udp - client.conf 文件。
- 操作步骤
1. 创建服务器配置文件:

proto udp
port 1194
dev tun
mode server
ifconfig 192.168.200.1 255.255.255.0
ifconfig - pool 192.168.200.100 192.168.200.120
route 192.168.200.0 255.255.248.0 192.168.200.1
push "route 192.168.200.1"
push "route 192.168.200.0 255.255.248.0"
ca       /etc/openvpn/cookbook/ca.crt
cert     /etc/openvpn/cookbook/server.crt
key      /etc/openvpn/cookbook/server.key
dh       /etc/openvpn/cookbook/dh2048.pem
tls - auth /etc/openvpn/cookbook/ta.key 0
persist - key
persist - tun
keepalive 10 60
topology subnet
push "topology subnet"
user  nobody
group nobody  # use "group nogroup" on some distros
daemon
log - append /var/log/openvpn.log
client - config - dir /etc/openvpn/cookbook/clients

保存为 example2 - 9 - server.conf
2. 启动服务器:

[root@server]# openvpn --config example2 - 9 - server.conf
3. 使用客户端配置文件为管理型 VPN 客户端分配一个特殊的 IP 地址:
[root@server]# mkdir -m 755 /etc/openvpn/cookbook/clients
[root@server]# cd /etc/openvpn/cookbook/clients
[root@server]# echo "ifconfig - push 192.168.202.6 192.168.202.6" \
  > client1

注意,客户端 VPN 地址列出了两次,这并非拼写错误。
4. 由于 OpenVPN 服务器进程启动后将以 nobody 用户身份运行,所以 clients 目录需要是全局可读的。
5. 使用之前配置的文件启动 Linux 客户端:

[root@AdminClient]# openvpn --config basic - udp - client.conf

客户端会输出如下内容:

[openvpnserver] Peer Connection Initiated with openvpnserver:1194
TUN/TAP device tun0 opened
do_ifconfig, tt->ipv6 = 0, tt->did_ifconfig_ipv6_setup = 0
/usr/sbin/ip link set dev tun0 up mtu 1500
/usr/sbin/ip addr add dev tun0 192.168.202.6/24 broadcast 192.168.200.255
Initialization Sequence Completed

这里高亮显示了分配给管理型客户端的 IP 地址。
6. 为 Windows 客户端创建配置文件:

client
proto udp
remote openvpnserver.example.com
port 1194
dev tun
nobind
ca       "c:/program files/openvpn/config/ca.crt"
cert     "c:/program files/openvpn/config/client2.crt"
key      "c:/program files/openvpn/config/client2.key"
tls - auth "c:/program files/openvpn/config/ta.key" 1
remote - cert - tls server

保存为 basic - udp - client.ovpn 。注意使用正斜杠 / ,它比反斜杠 \ 更易于使用,因为反斜杠每次都需要重复两次。
7. 使用安全通道(如 winscp 或 PuTTY 的 pscp 命令行工具)将 ca.crt client2.crt client2.key 文件以及 tls - auth 密钥文件 ta.key 传输到 Windows 机器上。
8. 使用 OpenVPN GUI 启动 Windows 客户端。记得此客户端的私钥文件受密码或密码短语保护。
9. 两台客户端连接后,验证它们可以相互 ping 通以及与服务器 ping 通(假设没有防火墙阻止访问):
- 在管理型客户端上:

[AdminClient]$ ping 192.168.200.1
[AdminClient]$ ping 192.168.200.102
    - 在普通客户端上:
[WinClient]C:> ping 192.168.200.1
[WinClient]C:> ping 192.168.202.6
  • 工作原理
    服务器配置文件通常使用以下指令为客户端配置一系列 IP 地址:
server 192.168.200.0 255.255.255.0

该指令在内部会扩展为:

mode server
tls - server
ifconfig 192.168.200.1 192.168.200.2
ifconfig - pool 192.168.200.4 192.168.200.251
route 192.168.200.0 255.255.255.0
push "route 192.168.200.1"
if (topology == subnet) push "topology subnet"

因此,不使用 server 指令,而是指定自己的 ifconfig - pool 范围,就可以覆盖默认行为。然后使用 CCD 文件为管理型客户端分配一个超出 ifconfig - pool 范围的 IP 地址。通过使用适当的 route push "route" 语句,确保所有客户端能够相互 ping 通。需要注意的是,在这种情况下,还需要显式推送拓扑结构,因为 server 指令不再自动完成此操作。

  • 其他细节
    • Windows 上的配置文件 :Windows 上的 OpenVPN GUI 应用程序总是从以下目录启动:
C:\Program Files\OpenVPN\config

或者在 64 位 Windows 系统上使用 32 位版本的 OpenVPN 时,从以下目录启动:

C:\Program Files(x86)\...

因此, basic - udp - client.ovpn 配置文件中的目录路径可以省略:

ca       ca.crt
cert     client2.crt
key      client2.key
tls - auth ta.key 1
- **客户端到客户端的访问**:通过此设置,即使在服务器端配置中未使用 `client - to - client` 指令,VPN 客户端也可以相互连接。这是由于服务器配置文件中的 `route` 和 `push "route"` 语句实现的。不使用 `client - to - client` 的优点是,仍然可以使用 `iptables` 或其他防火墙解决方案过滤不需要的流量。如果管理型客户端不需要连接到普通 VPN 客户端(反之亦然),则可以将子网掩码调整为:
route 192.168.200.0 255.255.255.0
push "route 192.168.200.0 255.255.255.0"

这样,网络就完全分开了。
- 使用 TCP 协议 :在上述示例中选择了 UDP 协议,客户端配置文件可以通过将以下行:

proto udp

更改为:

proto tcp

轻松转换为使用 TCP 协议。将此文件保存为 basic - tcp - client.ovpn 以备将来使用。

4. 使用状态文件

OpenVPN 提供了多种监控连接到服务器的客户端的选项,最常用的方法是使用状态文件。下面介绍如何使用和读取 OpenVPN 的状态文件。
- 准备工作
- 网络布局与服务器端路由配置的布局相同。
- 使用本章第一个配置创建的 PKI 文件。
- 在两台计算机上安装 OpenVPN 2.3.9 或更高版本,并确保它们通过网络连接。例如,服务器计算机运行 CentOS 6 Linux 和 OpenVPN 2.3.9,第一个客户端运行 Fedora 20 Linux 和 OpenVPN 2.3.9,第二个客户端运行 Windows 7 64 位和 OpenVPN 2.3.11。
- 服务器准备好服务器端路由配置中的 basic - udp - server.conf 文件;Linux 客户端准备好相同配置中的 basic - udp - client.conf 文件;Windows 客户端准备好之前配置中的 basic - udp - client.ovpn 文件。
- 操作步骤
1. 在 basic - udp - server.conf 文件中添加一行内容来创建服务器配置文件:

status /var/log/openvpn.status

保存为 example2 - 10 - server.conf
2. 启动服务器:

[root@server]# openvpn --config example2 - 10 - server.conf
3. 启动 Linux 客户端:
[root@client1]# openvpn --config basic - udp - client.conf
4. VPN 建立后,列出 `openvpn.status` 文件的内容:
[root@server]# cat /var/log/openvpn.status
5. 使用安全通道(如 `winscp` 或 PuTTY 的 `pscp` 命令行工具)将 `ca.crt`、`client2.crt` 和 `client2.key` 文件以及 `tls - auth` 密钥文件 `ta.key` 传输到 Windows 机器上。
6. 在命令行上启动 Windows 客户端:
[WinClient2]C:> cd \program files\openvpn\config
[WinClient2]C:> ..\bin\openvpn --config basic - udp - client.ovpn

记得此客户端的私钥文件受密码或密码短语保护。
7. 再次在服务器上列出状态文件的内容:

[root@server]# cat /var/log/openvpn.status
  • 工作原理
    每次客户端连接到 OpenVPN 服务器时,状态文件都会更新连接信息。OpenVPN 的 CLIENTLIST ROUTING TABLE 表是最有用的,它们提供以下信息:

    • 哪些客户端已连接。
    • 客户端从哪个 IP 地址连接。
    • 每个客户端接收和传输的字节数。
    • 客户端连接的时间。
      此外,路由表还显示哪些网络被路由到每个客户端。
  • 注意事项

    • 状态参数 status 指令接受两个参数:
      • 状态文件的文件名。
      • 可选的状态文件更新刷新频率。大多数情况下,默认值 60 秒就足够了。
    • 客户端断开连接 :当客户端断开连接时,状态文件不会立即更新。OpenVPN 首先会根据服务器配置文件中的 keepalive 参数尝试重新连接客户端。此配置文件中使用的 keepalive 参数为:
keepalive 10 60

这表示服务器将每 10 秒向客户端发送一次 ping 请求。如果在 60 秒 * 2 后仍未收到响应,则重新启动连接。OpenVPN 服务器会将第二个参数的值加倍。服务器还会告知客户端每 10 秒发送一次 ping 请求,并在 60 秒内未收到任何响应时重新启动连接。
- 显式退出通知 :OpenVPN 一个不太为人知的选项是以下指令:

explicit - exit - notify [N]

可以在客户端设置此指令,以便客户端断开连接时(如果可能)向服务器发送显式的 OCC_EXIT 消息。这将加快断开客户端的移除速度。可选参数 N 表示消息将发送的次数。默认情况下,只发送一条 OCC_EXIT 消息,由于 UDP 协议不保证数据包的传递,这可能会导致问题。

5. 管理接口

此部分介绍如何从服务器端使用管理接口管理 OpenVPN 客户端。
- 准备工作
- 网络布局与服务器端路由配置的布局相同。
- 使用本章第一个配置创建的 PKI 文件。
- 服务器计算机运行 CentOS 6 Linux 和 OpenVPN 2.3.9,客户端运行 Windows 7 64 位和 OpenVPN 2.3.10。
- 服务器准备好服务器端路由配置中的 basic - udp - server.conf 文件;Windows 客户端准备好之前配置中的 basic - udp - client.ovpn 文件。
- 操作步骤
1. 使用默认服务器配置文件启动服务器:

[root@server]# openvpn --config basic - udp - server.conf
2. 在 `basic - udp - client.ovpn` 文件中添加一行内容来为 Windows 客户端创建配置文件:
management tunnel 23000 stdin

保存为 example2 - 11.ovpn
3. 使用安全通道(如 winscp 或 PuTTY 的 pscp 命令行工具)将 ca.crt client2.crt client2.key 文件以及 tls - auth 密钥文件 ta.key 传输到 Windows 机器上。
4. 由于 OpenVPN GUI 不支持此管理接口的特定配置,因此在命令行上启动 Windows 客户端:

[WinClient]C:> cd \program files\openvpn\config
[WinClient]C:> ..\bin\openvpn --config example2 - 11.ovpn

OpenVPN 客户端会要求输入管理接口的密码,选择一个好的密码,之后会要求输入私钥密码短语。
5. VPN 建立后,在服务器上使用 telnet 程序连接到 OpenVPN 客户端的管理接口:

[server]$ telnet 10.200.0.3 23000
Trying 10.200.0.3...
Connected to 10.200.0.3.
Escape character is '^]'.
ENTER PASSWORD:
SUCCESS: password is correct
>INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info
status
OpenVPN STATISTICS
Updated,Fri Feb 5 18:22:31 2016
TUN/TAP read bytes,21849
TUN/TAP write bytes,451
TCP/UDP read bytes,6571
TCP/UDP write bytes,30172
Auth read bytes,707
TAP - WIN32 driver status,"(null)"
END
signal SIGTERM
6. 使用 `Ctrl + ]` 或 `quit` 退出 `telnet` 程序。
  • 工作原理
    当 OpenVPN 客户端连接到服务器时,使用以下指令设置一个特殊的管理接口:
management tunnel 23000 stdin

它有以下参数:
- tunnel 参数将管理接口绑定到 VPN 隧道本身,这对于测试目的和一些高级客户端设置很有用。在服务器端,最好始终为管理 IP 指定 127.0.0.1
- 管理接口将监听的端口 23000
- 最后一个参数是密码文件或特殊关键字 stdin ,表示管理接口密码将在 OpenVPN 启动时指定。注意,此密码与 OpenVPN 使用的私钥密码短语或任何其他用户管理密码完全无关。
管理接口启动后,服务器操作员可以使用 telnet 连接到它并查询客户端。客户端可以输入以下命令:

signal SIGTERM

这将使客户端像用户手动停止一样关闭,这显示了保护管理接口及其密码的重要性。

  • 其他用途
    管理接口也可以在 OpenVPN 服务器上运行,在这种情况下,可以列出已连接的客户端、断开它们的连接或执行各种其他 OpenVPN 管理任务。预计在未来版本的 OpenVPN 中,管理接口在客户端和服务器端都将变得更加重要,成为以编程方式与 OpenVPN 软件交互的首选方法。
6. 代理 ARP

此部分将使用 Linux 内核的代理 ARP 功能,使 VPN 客户端看起来像是服务器端局域网的一部分,这样就无需使用桥接,在大多数情况下这是更理想的选择。
- 准备工作
- 使用本章第一个配置创建的 PKI 文件。
- 服务器计算机运行 CentOS 6 Linux 和 OpenVPN 2.3.9,客户端运行 Windows 7 64 位和 OpenVPN 2.3.10。
- 服务器准备好服务器端路由配置中的 basic - udp - server.conf 文件;Windows 客户端准备好使用 ifconfig - pool 块配置中的 basic - udp - client.ovpn 文件。

客户端 - 服务器纯 IP 网络配置指南(续)

6. 代理 ARP(续)
  • 操作步骤
    1. 服务器端配置
      • 首先,编辑服务器的网络配置文件,开启 IP 转发功能。编辑 /etc/sysctl.conf 文件,找到并修改或添加以下行:
net.ipv4.ip_forward = 1
    - 使配置生效,执行以下命令:
sysctl -p /etc/sysctl.conf
    - 开启代理 ARP 功能,在服务器的网络接口上设置。假设服务器的外网接口为 `eth0`,VPN 接口为 `tun0`,执行以下命令:
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/tun0/proxy_arp
    - 为了让这些设置在系统重启后仍然生效,可以将上述命令添加到 `/etc/rc.local` 文件中。
2. **客户端连接**
    - 客户端使用 `basic - udp - client.ovpn` 文件连接到服务器。连接成功后,客户端就可以像在服务器端局域网内一样进行通信。
  • 工作原理
    代理 ARP 是一种技术,当一个主机收到一个目的地址不是自己的 ARP 请求时,如果它知道如何到达该目的地址,就会以自己的 MAC 地址响应这个 ARP 请求。在这个场景中,服务器作为代理 ARP 设备,当局域网内的其他设备发送 ARP 请求查找 VPN 客户端的 MAC 地址时,服务器会以自己的 MAC 地址响应。这样,局域网内的设备就会认为 VPN 客户端和服务器在同一个局域网内,从而实现了 VPN 客户端看起来像是服务器端局域网的一部分的效果。
7. 总结与注意事项
  • 配置总结
    • 本文介绍了客户端 - 服务器纯 IP 网络配置的多个方面,包括特殊路由与 VPN 网关、重定向 IPv6 默认网关、使用 ifconfig - pool 块、使用状态文件、管理接口和代理 ARP 等内容。
    • 通过这些配置,可以实现不同类型客户端的区分管理、保护 IPv6 流量、监控客户端连接状态、远程管理客户端以及使 VPN 客户端融入服务器端局域网等功能。
  • 注意事项
    • 安全方面
      • 管理接口的密码非常重要,需要妥善保护,避免被他人获取后对客户端或服务器进行恶意操作。
      • 传输 PKI 文件和密钥文件时,要使用安全通道,如 winscp 或 PuTTY 的 pscp 命令行工具,防止文件在传输过程中被窃取。
    • 配置方面
      • 在使用状态文件时,要注意客户端断开连接后状态文件不会立即更新,需要根据 keepalive 参数等待一段时间。可以考虑使用 explicit - exit - notify 指令加快断开客户端的移除速度。
      • 在配置服务器和客户端时,要确保各配置文件中的参数正确,特别是 IP 地址、端口号、密钥文件路径等。
      • 对于 Windows 客户端,要注意配置文件中的路径格式,使用正斜杠 / 更方便。

流程图

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始]):::startend --> B(准备工作):::process
    B --> C{选择配置类型}:::decision
    C -->|重定向 IPv6 默认网关| D(创建服务器配置文件):::process
    C -->|使用 ifconfig - pool 块| E(创建服务器配置文件):::process
    C -->|使用状态文件| F(创建服务器配置文件):::process
    C -->|管理接口| G(创建客户端配置文件):::process
    C -->|代理 ARP| H(服务器端配置):::process
    D --> I(启动服务器):::process
    E --> J(启动服务器):::process
    F --> K(启动服务器):::process
    G --> L(启动客户端):::process
    H --> M(客户端连接):::process
    I --> N(启动客户端):::process
    J --> O(为管理型客户端分配 IP):::process
    O --> P(启动客户端):::process
    K --> Q(启动客户端):::process
    N --> R(验证连接):::process
    P --> R
    Q --> R
    L --> S(连接管理接口):::process
    M --> R
    S --> T(查询客户端):::process
    R --> U([结束]):::startend
    T --> U

表格总结

配置类型 主要作用 关键配置文件 注意事项
重定向 IPv6 默认网关 保护 IPv6 流量,防止流量泄露 example2 - 8 - server.conf basic - udp - client.conf 服务器 IPv6 地址不能与重定向地址范围冲突
使用 ifconfig - pool 块 区分普通和管理型 VPN 客户端,便于设置防火墙规则 example2 - 9 - server.conf basic - udp - client.conf basic - udp - client.ovpn 客户端配置文件路径、客户端 IP 地址分配
使用状态文件 监控客户端连接状态 example2 - 10 - server.conf basic - udp - client.conf basic - udp - client.ovpn 客户端断开后状态文件更新延迟
管理接口 远程管理客户端 basic - udp - server.conf example2 - 11.ovpn 管理接口密码保护
代理 ARP 使 VPN 客户端融入服务器端局域网 basic - udp - server.conf basic - udp - client.ovpn 服务器端 IP 转发和代理 ARP 开启

通过以上配置和操作,你可以根据自己的需求构建一个安全、高效的客户端 - 服务器纯 IP 网络环境。在实际应用中,要根据具体情况进行调整和优化,确保网络的稳定运行。

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值