alroyso 1 year ago
parent
commit
4d6bb6c8d2

+ 10 - 0
lib/app/controller/GlobalController.dart

@@ -27,6 +27,7 @@ class GlobalController extends GetxController {
   var errorMsg = ''.obs;
   var statusCode = 0.obs;
   var systemProxySwitchIng = false.obs;
+  var tunProxySwitchIng = false.obs;
   bool allowStatusUpdate = false;
   final selectedNode = Rx<NodeMode?>(null);
   // 策略组
@@ -195,6 +196,15 @@ class GlobalController extends GetxController {
      return  await SystemProxy.instance.get();
   }
 
+
+  Future<void> TunProxySwitch(bool open) async {
+    tunProxySwitchIng.value = true;
+    updateRoute(open ? "tun" : "sys");
+    tunProxySwitchIng.value = false;
+  }
+
+
+
   Future<void> systemProxySwitch(bool open) async {
     systemProxySwitchIng.value = true;
     await SystemProxy.instance.set(open ? controllers.core.proxyConfig : SystemProxyConfig());

+ 19 - 21
lib/app/controller/config.dart

@@ -179,29 +179,27 @@ find-process-mode: strict
 global-client-fingerprint: chrome
 
 dns:
-  nameserver:
-    - 114.114.114.114
-    - 119.29.29.29
-  fallback:
-    - https://dns.cloudflare.com/dns-query
-    - "[2001:da8::666]:53"
-    - https://public.dns.iij.jp/dns-query
-    - https://jp.tiar.app/dns-query
-    - https://jp.tiarap.org/dns-query
-    - tls://dot.tiar.app
-  enable: $dnsEnab
-  ipv6: false
-  # enhanced-mode: redir-host
-  enhanced-mode: fake-ip
-  fake-ip-range: 198.18.0.1/16
-  listen: 0.0.0.0:$dnsPort
-  fake-ip-filter:
-    - "*.lan"
+  enable: true
+  listen: :$dnsPort
+  ipv6: true
+  enhanced-mode: redir-host
+  # fake-ip-range: 28.0.0.1/8
+  # fake-ip-filter:
+  #   - '*'
+  #   - '+.lan'
   default-nameserver:
-    - 114.114.114.114
     - 119.29.29.29
-    - "[2001:da8::666]:53"
-
+    - 223.5.5.5
+  nameserver:
+    - 'tls://8.8.4.4#proxy'
+    - 'https://1.0.0.1/dns-query#proxy'
+    - '[2001:4860:4860::8888]:53#proxy'
+  proxy-server-nameserver:
+    - tls://223.5.5.5
+    - 2400:3200::1
+  nameserver-policy:
+    "geosite:cn": [tls://119.29.29.29, tls://223.5.5.5,2400:3200::1]
+    
 tun:
   enable: ${clashCoreTunEnable.value}
   stack: $stack

+ 10 - 0
lib/app/controller/tray.dart

@@ -57,6 +57,12 @@ class TrayController extends GetxController with TrayListener {
         disabled: disabled || controllers.global.systemProxySwitchIng.value,
         onClick: handleClickSetAsSystemProxy,
       ),
+      MenuItem.checkbox(
+        label: 'route_tun_title'.tr,
+        checked: controllers.global.routeModesSelect.value == "tun",
+        disabled: disabled || controllers.global.tunProxySwitchIng.value,
+        onClick: handleClickSetAsTunProxy,
+      ),
       MenuItem.checkbox(
         label: 'setting_service_open'.tr,
         checked: controllers.service.serviceMode.value,
@@ -108,6 +114,10 @@ class TrayController extends GetxController with TrayListener {
     await controllers.global.systemProxySwitch(menuItem.checked != true);
   }
 
+  Future<void> handleClickSetAsTunProxy(MenuItem menuItem) async {
+    await controllers.global.TunProxySwitch(menuItem.checked != true);
+  }
+
   Future<void> handleClickCopyCommandLineProxy(MenuItem menuItem) async {
     final title = menuItem.label!;
     final proxyConfig = controllers.core.proxyConfig;

+ 38 - 42
lib/app/modules/home/views/home_view.dart

@@ -168,52 +168,48 @@ class HomeView extends GetView<HomeController> {
                   ),
                 ),
                 const SizedBox(height: 40,),
-                Align(
-                  alignment: Alignment.center,
-                  child: Padding(
-                    padding: const EdgeInsets.fromLTRB(60, 0, 50, 0),
-                    child: Row(
-                      children: [
-                        ButtonSelect(
-                          labels: ['setting_mode_rules'.tr,'setting_mode_global'.tr,],
-                          value: controllers.global.modes.indexOf(controllers.global.modesSelect.value),
-                          onSelect: (idx) => {
-                            controllers.global.updateMode(controllers.global.modes[idx])
-                          },
-                        ),
-                        const SizedBox(width: 10,),
-                        ButtonSelect(
-                            labels: ['route_sys_tile'.tr,'route_tun_title'.tr,],
-                            value: controllers.global.routeModes.indexOf(controllers.global.routeModesSelect.value),
-                            onSelect: (idx) => {
-                              controllers.global.updateRoute(controllers.global.routeModes[idx])
-                            }
-                        ),
-
-
-                      ],
-                    ),
-                  ),
-                ),
-                Padding(
-                  padding: const EdgeInsets.fromLTRB(60, 10, 50, 0),
+                Center(
                   child: Row(
                     children: [
-                      ElevatedButton(onPressed: () async {
-                        if(controller.serviceStuatus.value == false){
-                          await controller.installService();
-                        } else{
-                          await controller.UninstallService();
-                        }
-                      }, child: controller.serviceStuatus.value == false ? const Text("安装服务") : const Text("卸载服务")),
-                      const SizedBox(width: 10,),
-                      ElevatedButton(onPressed: () async{
-                        await controller.coreRestart();
-                      }, child: const Text("重启内核")),
-                    ],
+                      ButtonSelect(
+                        labels: ['setting_mode_rules'.tr,'setting_mode_global'.tr,],
+                        value: controllers.global.modes.indexOf(controllers.global.modesSelect.value),
+                        onSelect: (idx) => {
+                          controllers.global.updateMode(controllers.global.modes[idx])
+                        },
+                      ),
+                      // const SizedBox(width: 10,),
+                      // ButtonSelect(
+                      //     labels: ['route_sys_tile'.tr,'route_tun_title'.tr,],
+                      //     value: controllers.global.routeModes.indexOf(controllers.global.routeModesSelect.value),
+                      //     onSelect: (idx) => {
+                      //       controllers.global.updateRoute(controllers.global.routeModes[idx])
+                      //     }
+                      // ),
+
 
+                    ],
                   ),
-                )
+                ),
+                // Padding(
+                //   padding: const EdgeInsets.fromLTRB(60, 10, 50, 0),
+                //   child: Row(
+                //     children: [
+                //       ElevatedButton(onPressed: () async {
+                //         if(controller.serviceStuatus.value == false){
+                //           await controller.installService();
+                //         } else{
+                //           await controller.UninstallService();
+                //         }
+                //       }, child: controller.serviceStuatus.value == false ? const Text("安装服务") : const Text("卸载服务")),
+                //       const SizedBox(width: 10,),
+                //       ElevatedButton(onPressed: () async{
+                //         await controller.coreRestart();
+                //       }, child: const Text("重启内核")),
+                //     ],
+                //
+                //   ),
+                // )
                 // const SizedBox(height: 20,),
                 // Align(
                 //   alignment: Alignment.center,