diff --git a/l2tpmode.cpp b/l2tpmode.cpp
index d3d6c25..28b8f57 100644
--- a/l2tpmode.cpp
+++ b/l2tpmode.cpp
@@ -16,6 +16,7 @@ void MainWindow::setModeToL2tp()
ui->interfaceLabel->hide();
ui->refreshInterfaceButton->hide();
ui->interfaceComboBox->hide();
+ ui->tunCheckBox->hide();
// 清除系统代理
if (isSystemProxySet)
diff --git a/mainwindow.ui b/mainwindow.ui
index 08cfb58..dedc2f8 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -212,6 +212,22 @@ Windows Version: Windows 11
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 启用 TUN 模式需要以管理员权限运行程序
+
+
+ TUN 模式
+
+
+
- -
+
-
+
+
+ 设置端口转发
+
+
+
+ -
调试模式
- -
-
+
-
+
+
+ TUN 模式下有效
+
- 设置端口转发
+ 自动设置路由
diff --git a/webloginmode.cpp b/webloginmode.cpp
index f564905..ccf083f 100644
--- a/webloginmode.cpp
+++ b/webloginmode.cpp
@@ -29,6 +29,7 @@ void MainWindow::setModeToWebLogin()
ui->interfaceLabel->show();
ui->refreshInterfaceButton->show();
ui->interfaceComboBox->show();
+ ui->tunCheckBox->hide();
// 清除系统代理
if (isSystemProxySet)
diff --git a/zjuconnectcontroller/zjuconnectcontroller.cpp b/zjuconnectcontroller/zjuconnectcontroller.cpp
index bdbf85b..7c0261c 100644
--- a/zjuconnectcontroller/zjuconnectcontroller.cpp
+++ b/zjuconnectcontroller/zjuconnectcontroller.cpp
@@ -44,6 +44,8 @@ void ZjuConnectController::start(
bool proxyAll,
const QString &socksBind,
const QString &httpBind,
+ bool tunMode,
+ bool addRoute,
bool debugDump,
const QString &tcpPortForwarding,
const QString &udpPortForwarding
@@ -73,6 +75,20 @@ void ZjuConnectController::start(
args.append("-proxy-all");
}
+ if (tunMode)
+ {
+ args.append("-tun-mode");
+ args.append("-dns-server-bind");
+ args.append("127.0.0.1:53");
+ args.append("-tun-dns-server");
+ args.append("127.0.0.1");
+
+ if (addRoute)
+ {
+ args.append("-add-route");
+ }
+ }
+
if (debugDump)
{
args.append("-debug-dump");
diff --git a/zjuconnectcontroller/zjuconnectcontroller.h b/zjuconnectcontroller/zjuconnectcontroller.h
index f537069..caf4fb0 100644
--- a/zjuconnectcontroller/zjuconnectcontroller.h
+++ b/zjuconnectcontroller/zjuconnectcontroller.h
@@ -22,6 +22,8 @@ public:
bool proxyAll = false,
const QString &socksBind = "",
const QString &httpBind = "",
+ bool tunMode = false,
+ bool addRoute = false,
bool debugDump = false,
const QString &tcpPortForwarding = "",
const QString &udpPortForwarding = ""
diff --git a/zjuconnectmode.cpp b/zjuconnectmode.cpp
index 109298c..d9324ec 100644
--- a/zjuconnectmode.cpp
+++ b/zjuconnectmode.cpp
@@ -15,6 +15,7 @@ void MainWindow::setModeToZjuConnect()
ui->interfaceLabel->hide();
ui->refreshInterfaceButton->hide();
ui->interfaceComboBox->hide();
+ ui->tunCheckBox->show();
zjuConnectController = new ZjuConnectController();
@@ -105,6 +106,8 @@ void MainWindow::setModeToZjuConnect()
settings->value("ZJUConnect/ProxyAll", false).toBool(),
"127.0.0.1:" + QString::number(settings->value("ZJUConnect/Socks5Port", 1080).toInt()),
"127.0.0.1:" + QString::number(settings->value("ZJUConnect/HttpPort", 1081).toInt()),
+ ui->tunCheckBox->isChecked(),
+ settings->value("ZJUConnect/Route", false).toBool(),
settings->value("ZJUConnect/Debug", false).toBool(),
settings->value("ZJUConnect/TcpPortForwarding", "").toString(),
settings->value("ZJUConnect/UdpPortForwarding", "").toString()