@@ -12,6 +12,7 @@ use crate::channel::context::ChannelContext;
12
12
use crate :: channel:: idle:: Idle ;
13
13
use crate :: channel:: punch:: { NatInfo , Punch } ;
14
14
use crate :: channel:: sender:: IpPacketSender ;
15
+ use crate :: channel:: socket:: LocalInterface ;
15
16
use crate :: channel:: { init_channel, init_context, Route , RouteKey } ;
16
17
use crate :: cipher:: Cipher ;
17
18
#[ cfg( feature = "server_encrypt" ) ]
@@ -29,7 +30,7 @@ use crate::tun_tap_device::tun_create_helper::{DeviceAdapter, TunDeviceHelper};
29
30
use crate :: tun_tap_device:: vnt_device:: DeviceWrite ;
30
31
use crate :: util:: limit:: TrafficMeterMultiAddress ;
31
32
use crate :: util:: { Scheduler , StopManager } ;
32
- use crate :: { nat, VntCallback } ;
33
+ use crate :: { channel , nat, VntCallback } ;
33
34
34
35
#[ derive( Clone ) ]
35
36
pub struct Vnt {
@@ -137,9 +138,16 @@ impl VntInner {
137
138
} else {
138
139
nat:: local_ipv4 ( )
139
140
} ;
140
-
141
- let default_interface = config. local_interface . clone ( ) ;
142
- log:: info!( "default_interface = {:?}" , default_interface) ;
141
+ let default_interface = if config. in_ips . is_empty ( ) {
142
+ //没有改变路由,不需要绑定网卡
143
+ LocalInterface :: default ( )
144
+ } else {
145
+ //vnt的流量都走这个接口
146
+ let default_interface =
147
+ channel:: socket:: get_best_interface ( local_ipv4. unwrap_or ( Ipv4Addr :: UNSPECIFIED ) ) ?;
148
+ log:: info!( "default_interface = {:?}" , default_interface) ;
149
+ default_interface
150
+ } ;
143
151
144
152
//基础信息
145
153
let config_info = BaseConfigInfo :: new (
0 commit comments