Linux ip route:如何让所有外部流量通过一个接口

Linux ip route:如何让所有外部流量通过一个接口

我已经与外部服务器建立了 OpenVPN 连接。

tun0 是用于此连接的接口:

user@mypc:~$ ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.6  P-t-P:10.8.0.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

在服务器端,相应的 tun0 接口的 IP 地址为 10.8.0.1。如果我从一个 ping 到另一个,数据包已成功传送。

我的路由表如下所示:

user@mypc:~$ ip r s 
default via 192.168.1.1 dev wlan0  proto static 
10.8.0.1 via 10.8.0.5 dev tun0 
10.8.0.5 dev tun0  proto kernel  scope link  src 10.8.0.6 
169.254.0.0/16 dev wlan0  scope link  metric 1000 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.4  metric 2 

我的目的是通过 VPN 连接到互联网。所有流量必须先从 VPN 服务器通过,然后再到“外部世界”。

我的问题是:如何让整个外部流量仅从 tun0 接口通过?我必须更改默认网关吗?还是其他什么?

谢谢。

答案1

为了能够通过您的 VPN 隧道路由所有互联网绑定流量,您需要更改默认路由以通过该 VPN 接口,在您的情况下为“10.8.0.5 dev tun0”。

为此,你需要输入如下命令

ip route add default via 10.8.0.5

两个默认路由可能存在一些奇怪之处,而且我不确定除了每次想要再次设置 VPN 连接时简单地删除并重新添加之外,还有没有干净的方法来管理默认路由 - 根据您的客户端,可能有针对此的设置或您可以将这些命令放入的脚本。

相关内容