使用 openVPN 后,我有了一个新的 TUN 设备。我也按照网上的一些步骤允许传入传输进入我的服务器,但我不明白它是如何工作的。
IP地址:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:e2:97:22 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.129/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::de8d:8f16:39a0:8bb9/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether b8:27:eb:b7:c2:77 brd ff:ff:ff:ff:ff:ff
inet6 fe80::6877:4a6e:7067:da26/64 scope link tentative
valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.8.118 peer 10.8.8.117/32 scope global tun0
valid_lft forever preferred_lft forever
IP 规则:
0: from all lookup local
32765: from 192.168.0.129 lookup 128
32766: from all lookup main
32767: from all lookup default
128表:
default via 192.168.0.1 dev eth0
10.8.8.117 dev eth0 scope link
主表:
0.0.0.0/1 via 10.8.8.117 dev tun0
default via 192.168.0.1 dev eth0 metric 202
10.8.8.1 via 10.8.8.117 dev tun0
10.8.8.117 dev tun0 proto kernel scope link src 10.8.8.118
128.0.0.0/1 via 10.8.8.117 dev tun0
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.129 metric 202
198.148.86.170 via 192.168.0.1 dev eth0
本地表:
local 10.8.8.118 dev tun0 proto kernel scope host src 10.8.8.118
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 192.168.0.0 dev eth0 proto kernel scope link src 192.168.0.129
local 192.168.0.129 dev eth0 proto kernel scope host src 192.168.0.129
broadcast 192.168.0.255 dev eth0 proto kernel scope link src 192.168.0.129
有人能解释一下数据包会通过什么路由吗?我主要对表 128 感到困惑。如果没有该规则和表,当 VPN 运行时,我无法从网络外部通过 SSH 进入或连接到我机器上的服务器。添加这两条规则如何让我做到这一点?它们是什么意思?
答案1
在没有 NAT、没有状态防火墙、每个接口都有可公开路由 IP 地址的世界中,这并非必要。但是,我们并不生活在那样的世界。我们生活在一个典型的连接通常要经过多个防火墙和 NAT 设备的世界。
基本上你有一个非对称路由问题。
非对称路由本身不是问题,但是当在路由路径中使用网络地址转换 (NAT) 或防火墙时会导致问题。
当客户端设备与您的主机建立 ssh 连接时,它将在 tcp/ip 标头中具有源 ip/端口和目标 ip/端口。回复数据包将具有用于回复的 ssh 接口的源 ip/端口以及远程主机的目标地址/端口。在您此处的示例中,传入数据包有两种到达您的方式,并且默认的传出路由与将使用的传入地址不同。如果您没有添加规则,则发送回复数据包时,它将具有不同的源 ip/端口,这与 ssh 客户端的防火墙根据发送传出数据包所使用的内容所期望的源 ip/端口不同。由于传出数据包中的目标与回复中的源不同,因此它可能会被防火墙拒绝,或者可能与 NAT 状态表中的内容不匹配。
您制定的规则基本上强制传入系统从接收请求的接口进行回复,这意味着所有地址都将正确匹配,并且数据包将被允许通过任何防火墙。