Add TUN device name setting support to easytier-gui

This commit is contained in:
Hs_Yeah 2024-09-23 23:06:25 +08:00 committed by Sijie.Sun
parent 92397bf7b6
commit 0b927bcc91
7 changed files with 34 additions and 3 deletions

View File

@ -13,6 +13,7 @@ proxy_cidrs: 子网代理CIDR
enable_vpn_portal: 启用VPN门户 enable_vpn_portal: 启用VPN门户
vpn_portal_listen_port: 监听端口 vpn_portal_listen_port: 监听端口
vpn_portal_client_network: 客户端子网 vpn_portal_client_network: 客户端子网
dev_name: TUN接口名称
advanced_settings: 高级设置 advanced_settings: 高级设置
basic_settings: 基础设置 basic_settings: 基础设置
listener_urls: 监听地址 listener_urls: 监听地址
@ -45,6 +46,7 @@ enable_auto_launch: 开启开机自启
exit: 退出 exit: 退出
chips_placeholder: 例如: {0}, 按回车添加 chips_placeholder: 例如: {0}, 按回车添加
hostname_placeholder: '留空默认为主机名: {0}' hostname_placeholder: '留空默认为主机名: {0}'
dev_name_placeholder: 注意当多个网络同时使用相同的TUN接口名称时将会在设置TUN的IP时产生冲突留空以自动生成随机名称
off_text: 点击关闭 off_text: 点击关闭
on_text: 点击开启 on_text: 点击开启
show_config: 显示配置 show_config: 显示配置

View File

@ -13,6 +13,7 @@ proxy_cidrs: Subnet Proxy CIDRs
enable_vpn_portal: Enable VPN Portal enable_vpn_portal: Enable VPN Portal
vpn_portal_listen_port: VPN Portal Listen Port vpn_portal_listen_port: VPN Portal Listen Port
vpn_portal_client_network: Client Sub Network vpn_portal_client_network: Client Sub Network
dev_name: TUN interface name
advanced_settings: Advanced Settings advanced_settings: Advanced Settings
basic_settings: Basic Settings basic_settings: Basic Settings
listener_urls: Listener URLs listener_urls: Listener URLs
@ -46,6 +47,7 @@ exit: Exit
use_latency_first: Latency First Mode use_latency_first: Latency First Mode
chips_placeholder: 'e.g: {0}, press Enter to add' chips_placeholder: 'e.g: {0}, press Enter to add'
hostname_placeholder: 'Leave blank and default to host name: {0}' hostname_placeholder: 'Leave blank and default to host name: {0}'
dev_name_placeholder: 'Note: When multiple networks use the same TUN interface name at the same time, there will be a conflict when setting the TUN''s IP. Leave blank to automatically generate a random name.'
off_text: Press to disable off_text: Press to disable
on_text: Press to enable on_text: Press to enable
show_config: Show Config show_config: Show Config

View File

@ -61,6 +61,8 @@ struct NetworkConfig {
listener_urls: Vec<String>, listener_urls: Vec<String>,
rpc_port: i32, rpc_port: i32,
latency_first: bool, latency_first: bool,
dev_name: String,
} }
impl NetworkConfig { impl NetworkConfig {
@ -163,6 +165,7 @@ impl NetworkConfig {
} }
let mut flags = Flags::default(); let mut flags = Flags::default();
flags.latency_first = self.latency_first; flags.latency_first = self.latency_first;
flags.dev_name = self.dev_name.clone();
cfg.set_flags(flags); cfg.set_flags(flags);
Ok(cfg) Ok(cfg)
} }

View File

@ -174,7 +174,7 @@ onMounted(async () => {
<label for="network_secret">{{ t('network_secret') }}</label> <label for="network_secret">{{ t('network_secret') }}</label>
<InputText <InputText
id="network_secret" v-model="curNetwork.network_secret" id="network_secret" v-model="curNetwork.network_secret"
aria-describedby=" network_secret-help" aria-describedby="network_secret-help"
/> />
</div> </div>
</div> </div>
@ -278,11 +278,21 @@ onMounted(async () => {
<div class="flex flex-column gap-2 basis-5/12 grow"> <div class="flex flex-column gap-2 basis-5/12 grow">
<label for="rpc_port">{{ t('rpc_port') }}</label> <label for="rpc_port">{{ t('rpc_port') }}</label>
<InputNumber <InputNumber
id="rpc_port" v-model="curNetwork.rpc_port" aria-describedby="username-help" id="rpc_port" v-model="curNetwork.rpc_port" aria-describedby="rpc_port-help"
:format="false" :min="0" :max="65535" :format="false" :min="0" :max="65535"
/> />
</div> </div>
</div> </div>
<div class="flex flex-row gap-x-9 flex-wrap">
<div class="flex flex-column gap-2 basis-5/12 grow">
<label for="dev_name">{{ t('dev_name') }}</label>
<InputText
id="dev_name" v-model="curNetwork.dev_name" aria-describedby="dev_name-help" :format="true"
:placeholder="t('dev_name_placeholder')"
/>
</div>
</div>
</div> </div>
</Panel> </Panel>

View File

@ -131,8 +131,16 @@ const myNodeInfoChips = computed(() => {
if (!my_node_info) if (!my_node_info)
return chips return chips
// virtual ipv4 // TUN Device Name
const dev_name = curNetworkInst.value.detail?.dev_name
if (dev_name) {
chips.push({
label: `TUN Device Name: ${dev_name}`,
icon: '',
} as Chip)
}
// virtual ipv4
chips.push({ chips.push({
label: `Virtual IPv4: ${my_node_info.virtual_ipv4}`, label: `Virtual IPv4: ${my_node_info.virtual_ipv4}`,
icon: '', icon: '',

View File

@ -32,6 +32,8 @@ export interface NetworkConfig {
listener_urls: string[] listener_urls: string[]
rpc_port: number rpc_port: number
latency_first: boolean latency_first: boolean
dev_name: string
} }
export function DEFAULT_NETWORK_CONFIG(): NetworkConfig { export function DEFAULT_NETWORK_CONFIG(): NetworkConfig {
@ -64,6 +66,7 @@ export function DEFAULT_NETWORK_CONFIG(): NetworkConfig {
], ],
rpc_port: 0, rpc_port: 0,
latency_first: true, latency_first: true,
dev_name: '',
} }
} }
@ -77,6 +80,7 @@ export interface NetworkInstance {
} }
export interface NetworkInstanceRunningInfo { export interface NetworkInstanceRunningInfo {
dev_name: string
my_node_info: NodeInfo my_node_info: NodeInfo
events: Record<string, any> events: Record<string, any>
node_info: NodeInfo node_info: NodeInfo

View File

@ -267,6 +267,7 @@ impl Drop for EasyTierLauncher {
#[derive(Deserialize, Serialize, Debug)] #[derive(Deserialize, Serialize, Debug)]
pub struct NetworkInstanceRunningInfo { pub struct NetworkInstanceRunningInfo {
pub dev_name: String,
pub my_node_info: MyNodeInfo, pub my_node_info: MyNodeInfo,
pub events: Vec<(DateTime<Local>, GlobalCtxEvent)>, pub events: Vec<(DateTime<Local>, GlobalCtxEvent)>,
pub node_info: MyNodeInfo, pub node_info: MyNodeInfo,
@ -306,6 +307,7 @@ impl NetworkInstance {
let peer_route_pairs = list_peer_route_pair(peers.clone(), routes.clone()); let peer_route_pairs = list_peer_route_pair(peers.clone(), routes.clone());
Some(NetworkInstanceRunningInfo { Some(NetworkInstanceRunningInfo {
dev_name: self.config.get_flags().dev_name.clone(),
my_node_info: launcher.get_node_info(), my_node_info: launcher.get_node_info(),
events: launcher.get_events(), events: launcher.get_events(),
node_info: launcher.get_node_info(), node_info: launcher.get_node_info(),