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 模式 + + + diff --git a/settingwindow/settingwindow.cpp b/settingwindow/settingwindow.cpp index 9e08c94..7985b25 100644 --- a/settingwindow/settingwindow.cpp +++ b/settingwindow/settingwindow.cpp @@ -59,6 +59,7 @@ SettingWindow::SettingWindow(QWidget *parent, QSettings *inputSettings) : ui->autoReconnectCheckBox->setChecked(settings->value("ZJUConnect/AutoReconnect", false).toBool()); ui->reconnectTimeSpinBox->setValue(settings->value("ZJUConnect/ReconnectTime", 1).toInt()); ui->autoSetProxyCheckBox->setChecked(settings->value("ZJUConnect/AutoSetProxy", false).toBool()); + ui->routeCheckBox->setChecked(settings->value("ZJUConnect/Route", false).toBool()); ui->l2tpNameLineEdit->setText(settings->value("L2TP/Name", "ZJUVPN").toString()); @@ -158,6 +159,7 @@ SettingWindow::SettingWindow(QWidget *parent, QSettings *inputSettings) : settings->setValue("ZJUConnect/AutoReconnect", ui->autoReconnectCheckBox->isChecked()); settings->setValue("ZJUConnect/ReconnectTime", ui->reconnectTimeSpinBox->value()); settings->setValue("ZJUConnect/AutoSetProxy", ui->autoSetProxyCheckBox->isChecked()); + settings->setValue("ZJUConnect/Route", ui->routeCheckBox->isChecked()); settings->setValue("L2TP/Name", ui->l2tpNameLineEdit->text()); settings->setValue("L2TP/AutoReconnect", ui->l2tpAutoCheckComboBox->currentText() == "是"); diff --git a/settingwindow/settingwindow.ui b/settingwindow/settingwindow.ui index c447c9e..90bfceb 100644 --- a/settingwindow/settingwindow.ui +++ b/settingwindow/settingwindow.ui @@ -555,17 +555,27 @@ - + + + + 设置端口转发 + + + + 调试模式 - - + + + + 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()