我已经配置了一个 openvpn 服务器 (Debian 10) 来访问本地网络上的 Web 服务器,一切正常,但查看 iptables 日志时,有一件事我不明白。这是我设置 Iptables 的方式:
192.168.0.42 = Web-server ip
192.168.0.21 (Current host) = VPN Server ip
10.8.0.6 = Virtual IP address of the remote client (VPN)
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
...
-A POSTROUTING -s 10.8.0.0/8 -o enp0s3 -j MASQUERADE
COMMIT
*mangle
:INPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
...
-A PREROUTING -p tcp -d 192.168.0.21 -s 192.168.0.42 -j MARK --set-mark 10
-A POSTROUTING -p tcp -j LOG --log-prefix "[iptables-post] " --log-prefix 4
-A INPUT -p tcp -j LOG --log-prefix "[iptables-input] " --log-prefix 4
-A PREROUTING -p tcp -j LOG --log-prefix "[iptables-pre] " --log-prefix 4
-A OUTPUT -p tcp -j LOG --log-prefix "[iptables-out] " --log-prefix 4
-A FORWARD -p tcp -j LOG --log-prefix "[iptables-forward] " --log-prefix 4
COMMIT
结果,我跟踪了从 Web 服务器到我的 VPN 服务器(再返回到客户端)的标记数据包(10),这就是它通过 Iptables 的方式:
*mangle
PREROUTING: => FORWARD: => POSTROUTING:
SRC=192.168.0.42 SRC=192.168.0.42 SRC=192.168.0.42
DST=192.168.0.21 DST=10.8.0.6 DST=10.8.0.6
IN =enp0s3 IN =enp0s3 IN =
OUT= OUT=tun0 OUT=tun0
我不明白数据包在路由后链,因为目标地址是10.8.0.6,服务器不知道将数据包重定向到哪里,或者是否知道将数据包的目标地址重定向到哪里10.8.0.6? 如果是,服务器如何知道这一点?
同样地,向前chain,为什么它从目标地址改变192.168.0.21到10.8.0.6?难道不应该重定向到 INPUT 吗?因为目标地址是192.168.0.21- 这是当前主机(VPN)的地址。最后一个问题:为什么来自 Web 服务器的请求只到达向前链?VPN 服务器不应该在将数据传输到客户端之前对其进行加密吗?我不太明白这一点,我一直在寻找答案,但仍然没有找到答案,如果有人能帮我弄清楚,我会非常高兴。
我的路由表如下所示:
Destination Gateway Genmask Iface
default 192.168.0.1 0.0.0.0 enp0s3
10.8.0.0 10.8.0.2 255.255.255.0 tun0
10.8.0.2 0.0.0.0 255.255.255.255 tun0
192.168.0.0 0.0.0.0 255.255.255.0 enp0s3
OpenVPN 服务器.conf:
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "route 192.168.0.42 255.255.255.255"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0
tls-version-min 1.3
cipher AES-256-GCM
auth SHA256
max-clients 2
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
explicit-exit-notify 0
tcp-queue-limit 256