psi*_*i75 7 network-manager vpn networking ipsec
我正在使用 Gnome 网络管理器连接到我的办公室 VPN。它使用 StrongSwan IPSec。
它连接正常,但我所有的互联网流量都是通过办公室路由的。我不想这样,我只想查看我办公室的 IP 地址,而不希望所有互联网流量都经过办公室。另外,如果可能的话,使用办公室 DNS 来解析办公室服务器名称(但这不太重要)。
设置以下设置:
更新:我的ip -r输出是:
default via 192.168.188.1 dev enp3s0 proto dhcp metric 100
169.254.0.0/16 dev enp3s0 scope link metric 1000
192.168.2.103 dev enp3s0 proto kernel scope link src 192.168.2.103 metric 50
192.168.2.103 dev enp3s0 proto kernel scope link src 192.168.2.103 metric 100
192.168.188.0/24 dev enp3s0 proto kernel scope link src 192.168.188.21 metric 100
Run Code Online (Sandbox Code Playgroud)
小智 4
一般的想法是修改路由表,以便只有已知的办公子网(地址块)通过您的 VPN 接口(例如 ppp0)进行路由,而所有其他子网都通过您的普通网络接口(例如 en0)进行路由。当您连接到 VPN 时,Gnome 网络管理器会将所谓的默认路由添加到 VPN 接口 (ppp0)。您需要删除此路由,但为已知的办公子网添加新的路由条目。
首先,您需要找到您的办公网络使用哪些私有子网。最简单的方法就是询问您办公室的网络管理员。如果这不是一个选项,您可以在连接到 VPN 后通过解析您的办公室主机名来自行计算。例如:
$ nslookup service.company.office
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: service.company.office
Address: 192.168.1.22
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您需要通过 VPN 路由的子网是 192.168.1.0/24,这意味着从 192.168.1.0 到 192.168.1.255 的所有地址。您的办公室可能有多个需要路由的子网。
其次,需要使用ip命令修改路由表。通过键入打印表格ip r并查找指向 VPN 设备的条目:
$ ip r
default dev ppp0 proto static scope link metric 50
default via 192.168.20.1 dev eno1 proto dhcp metric 100
...
192.168.20.0/24 dev eno1 proto kernel scope link src 192.168.20.126 metric 100
192.168.100.1 dev ppp0 proto kernel scope link src 192.168.100.89 metric 50
Run Code Online (Sandbox Code Playgroud)
现在您知道这ppp0是您的 VPN 设备了。在我的示例中,有两条默认路由,但ppp0度量较小,因此所有流量都会流向那里。现在,添加一条到您的办公网络的单独路由:
$ ip route add 192.168.1.0/24 dev ppp0 proto static scope link
Run Code Online (Sandbox Code Playgroud)
现在您只需删除默认路由ppp0即可:
$ ip route delete default dev ppp0
Run Code Online (Sandbox Code Playgroud)
您可以通过以下脚本自动执行此操作:
#!/bin/bash
# List your office networks
networks=(
192.168.1.0/24
192.168.2.0/24
)
# Execute it with sudo
if [ $(id -u) != "0" ]; then
echo "You must be root to execute this script. Use sudo?"
exit -1
fi
# Check if VPN is active. You can use ipsec status command
# if your VPN is not L2TP
tunnel=$(ip l2tp show tunnel 2>&1)
if [ -z "$tunnel" ]; then
echo "VPN is not active."
exit -2
fi
# Add office private network routes
for net in ${networks[*]}; do
ret=$(ip route add $net dev ppp0 proto static scope link 2>&1)
if [[ $ret =~ "File exists" ]]; then
echo "routes have been already added."
exit -3
fi
done
# Delete default routes so Internet is routed via local ISP
ip route delete default dev ppp0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6246 次 |
| 最近记录: |