Files
TunnelX/AppTunnel/Views/HelpTabView.xaml
T
MaxFan b311473df4 Add OpenVPN split-tunnel support
Adds external OpenVPN Community integration with split-compatible routing, safer connection readiness checks, profile persistence, UI guidance, and release documentation for the new version.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-17 15:20:37 +03:30

362 lines
22 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<UserControl x:Class="AppTunnel.Views.HelpTabView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:services="clr-namespace:AppTunnel.Services">
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
Padding="0,14,0,12">
<StackPanel Margin="16,0">
<!-- Overview -->
<Border Style="{StaticResource CardPanel}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Text="TunnelX"
FontSize="22"
FontWeight="Bold"
Foreground="{StaticResource TextPrimaryBrush}"/>
<TextBlock Text="Split tunneling برای برنامه‌ها، مقصدها و حالت کل سیستم"
FontSize="11"
Foreground="{StaticResource TextSecondaryBrush}"
Margin="0,4,0,0"/>
</StackPanel>
<Border Grid.Column="1"
Background="#1AE8803A"
CornerRadius="8"
Padding="10,5"
VerticalAlignment="Center">
<TextBlock Text="{x:Static services:AppInfo.VersionText}"
FontSize="12"
FontWeight="SemiBold"
Foreground="{StaticResource AccentBrush}"
FlowDirection="LeftToRight"/>
</Border>
</Grid>
</Border>
<!-- Project + Support -->
<Border Style="{StaticResource CardPanel}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="12"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Style="{StaticResource SectionHeader}" Text="پروژه آزاد و حمایت"/>
<TextBlock Text="{Binding AppCreatorText}"
FontSize="11"
Foreground="{StaticResource TextPrimaryBrush}"
Margin="0,0,0,4"/>
<TextBlock Text="{Binding AppGitHubUrl}"
FontSize="10"
Foreground="{StaticResource AccentBrush}"
FlowDirection="LeftToRight"
TextWrapping="Wrap"/>
<TextBlock Text="{Binding AppLicenseText, StringFormat=لایسنس: {0}}"
FontSize="10"
Foreground="{StaticResource TextSecondaryBrush}"
FlowDirection="LeftToRight"
Margin="0,5,0,0"/>
<TextBlock Text="{Binding DonatePayPalText}"
FontSize="10"
Foreground="{StaticResource TextSecondaryBrush}"
FlowDirection="LeftToRight"
Margin="0,5,0,0"/>
<TextBlock Text="{Binding CryptoDonationText}"
FontSize="10"
Foreground="{StaticResource TextSecondaryBrush}"
FontFamily="Consolas"
FlowDirection="LeftToRight"
TextWrapping="Wrap"
Margin="0,5,0,0"/>
</StackPanel>
<StackPanel Grid.Column="2"
Orientation="Vertical"
VerticalAlignment="Center"
MinWidth="150">
<Button Style="{StaticResource SecondaryButton}"
Content="باز کردن گیت‌هاب"
Command="{Binding OpenGitHubCommand}"
Padding="14,8"/>
<Button Style="{StaticResource PrimaryButton}"
Content="حمایت با پی‌پل"
Command="{Binding OpenDonateCommand}"
Padding="16,8"
Margin="0,8,0,0"/>
<Button Style="{StaticResource SecondaryButton}"
Content="کپی اطلاعات حمایت"
Command="{Binding CopyDonationInfoCommand}"
Padding="14,8"
Margin="0,8,0,0"/>
</StackPanel>
</Grid>
</Border>
<!-- Updates -->
<Border Style="{StaticResource CardPanel}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="12"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Style="{StaticResource SectionHeader}" Text="بروزرسانی"/>
<TextBlock Text="{Binding UpdateStatusText}"
FontSize="11"
Foreground="{StaticResource TextSecondaryBrush}"
TextWrapping="Wrap"
LineHeight="18"/>
</StackPanel>
<StackPanel Grid.Column="2"
Orientation="Vertical"
VerticalAlignment="Center"
MinWidth="150">
<Button Style="{StaticResource SecondaryButton}"
Content="{Binding UpdateButtonText}"
Command="{Binding CheckForUpdatesCommand}"
Padding="14,8"/>
<Button Style="{StaticResource PrimaryButton}"
Content="باز کردن صفحه انتشار"
Command="{Binding OpenLatestReleaseCommand}"
Padding="14,8"
Margin="0,8,0,0"/>
</StackPanel>
</Grid>
</Border>
<!-- Quick Path -->
<Border Style="{StaticResource CardPanel}">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="شروع سریع"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="8"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="0" Background="#11FFFFFF" CornerRadius="8" Padding="12,10">
<StackPanel>
<TextBlock Text="۱. پروفایل" FontSize="12" FontWeight="SemiBold"
Foreground="{StaticResource TextPrimaryBrush}"/>
<TextBlock Text="نوع اتصال را انتخاب کنید: L2TP، V2Ray/Xray یا اوپن‌وی‌پی‌ان. برای اسپلیت اوپن‌وی‌پی‌ان، نسخه Community لازم است؛ فایل .ovpn را انتخاب کنید و نام کاربری/رمز را در TunnelX وارد کنید."
FontSize="10" TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,5,0,0"/>
</StackPanel>
</Border>
<Border Grid.Row="0" Grid.Column="2" Background="#11FFFFFF" CornerRadius="8" Padding="12,10">
<StackPanel>
<TextBlock Text="۲. تست سرور" FontSize="12" FontWeight="SemiBold"
Foreground="{StaticResource TextPrimaryBrush}"/>
<TextBlock Text="قبل از اتصال، تست سرور را بزنید. برای TLS، handshake واقعی اندازه‌گیری می‌شود."
FontSize="10" TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,5,0,0"/>
</StackPanel>
</Border>
<Border Grid.Row="2" Grid.Column="0" Background="#11FFFFFF" CornerRadius="8" Padding="12,10">
<StackPanel>
<TextBlock Text="۳. برنامه‌ها" FontSize="12" FontWeight="SemiBold"
Foreground="{StaticResource TextPrimaryBrush}"/>
<TextBlock Text="برنامه‌هایی که باید از تونل عبور کنند را در تب برنامه‌ها فعال کنید."
FontSize="10" TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,5,0,0"/>
</StackPanel>
</Border>
<Border Grid.Row="2" Grid.Column="2" Background="#11FFFFFF" CornerRadius="8" Padding="12,10">
<StackPanel>
<TextBlock Text="۴. اتصال" FontSize="12" FontWeight="SemiBold"
Foreground="{StaticResource TextPrimaryBrush}"/>
<TextBlock Text="بعد از اتصال، کارت سلامت ترافیک را برای Leak، DNS، IPv6 و Route بررسی کنید."
FontSize="10" TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,5,0,0"/>
</StackPanel>
</Border>
</Grid>
</StackPanel>
</Border>
<!-- Connection Types -->
<Border Style="{StaticResource CardPanel}">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="راهنمای نوع اتصال"/>
<TextBlock Text="L2TP/IPsec"
FontSize="12"
FontWeight="SemiBold"
Foreground="{StaticResource TextPrimaryBrush}"/>
<TextBlock Text="آدرس سرور، نام کاربری، رمز عبور و Pre-Shared Key را وارد کنید؛ TunnelX اتصال ویندوز را ایجاد و مسیرها را مدیریت می‌کند."
FontSize="11"
LineHeight="18"
TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}"
Margin="0,4,0,10"/>
<TextBlock Text="V2Ray / Xray"
FontSize="12"
FontWeight="SemiBold"
Foreground="{StaticResource TextPrimaryBrush}"/>
<TextBlock Text="لینک یا کانفیگ V2Ray/Xray را در فیلد کانفیگ وارد کنید. TunnelX با sing-box/Xray تونل را بالا می‌آورد و برنامه‌های انتخابی را از آن عبور می‌دهد."
FontSize="11"
LineHeight="18"
TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}"
Margin="0,4,0,10"/>
<TextBlock Text="OpenVPN"
FontSize="12"
FontWeight="SemiBold"
Foreground="{StaticResource TextPrimaryBrush}"/>
<TextBlock Text="TunnelX فایل اوپن‌وی‌پی‌ان را همراه خود توزیع نمی‌کند. برای اسپلیت‌تانلینگ باید نسخه Community نصب باشد، چون TunnelX باید فایل openvpn.exe را با کانفیگ سازگار با اسپلیت اجرا کند. نسخه Connect معمولاً مسیر و DNS را خودش تغییر می‌دهد و برای جدا کردن ترافیک برنامه‌ها مناسب نیست. در تب اتصال فایل .ovpn را انتخاب کنید و اگر سرور نیاز دارد، نام کاربری و رمز را در TunnelX وارد کنید."
FontSize="11"
LineHeight="18"
TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}"
Margin="0,4,0,0"/>
</StackPanel>
</Border>
<!-- Modes -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Style="{StaticResource CardPanel}">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="حالت انتخابی"/>
<TextBlock Text="فقط برنامه‌های انتخاب‌شده و مقصدهای لزومی از تونل عبور می‌کنند. این حالت برای مصرف کمتر و کنترل دقیق‌تر پیشنهاد می‌شود."
FontSize="11"
LineHeight="19"
TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}"/>
</StackPanel>
</Border>
<Border Grid.Column="2" Style="{StaticResource CardPanel}">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="عبور کل سیستم"/>
<TextBlock Text="وقتی Full Route روشن باشد، کل ترافیک ویندوز از تونل عبور می‌کند. برای تست یا زمانی که همه برنامه‌ها باید VPN داشته باشند مناسب است."
FontSize="11"
LineHeight="19"
TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}"/>
</StackPanel>
</Border>
</Grid>
<!-- Rules + Apps -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Style="{StaticResource CardPanel}">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="برنامه‌ها"/>
<TextBlock TextWrapping="Wrap" FontSize="11" LineHeight="19"
Foreground="{StaticResource TextSecondaryBrush}">
برنامه‌های Store/MSIX و WebView2 ممکن است چند پردازش داشته باشند. اگر اپی دیده نشد، آن را باز کنید و دوباره بارگذاری برنامه‌ها را بزنید.
</TextBlock>
</StackPanel>
</Border>
<Border Grid.Column="2" Style="{StaticResource CardPanel}">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="قوانین مسیر"/>
<TextBlock TextWrapping="Wrap" FontSize="11" LineHeight="19"
Foreground="{StaticResource TextSecondaryBrush}">
استثناها مقصد را مستقیم نگه می‌دارند. لزومی‌ها مقصد را حتی بدون انتخاب برنامه از تونل عبور می‌دهند. دامنه، IP و URL قابل استفاده است.
</TextBlock>
</StackPanel>
</Border>
</Grid>
<!-- Local Proxy + Diagnostics -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Style="{StaticResource CardPanel}">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="SOCKS5 داخلی"/>
<TextBlock TextWrapping="Wrap" FontSize="11" LineHeight="19"
Foreground="{StaticResource TextSecondaryBrush}">
پروکسی داخلی روی 127.0.0.1 اجرا می‌شود. پورت را قبل از اتصال انتخاب کنید؛ پورت‌های سیستم، رزرو و پورت‌های رایج توسعه محدود شده‌اند.
</TextBlock>
<Border Background="#11FFFFFF" CornerRadius="6" Padding="8" Margin="0,8,0,0">
<TextBlock Text="127.0.0.1:1080"
FontSize="11"
FontFamily="Consolas"
Foreground="{StaticResource AccentBrush}"
FlowDirection="LeftToRight"/>
</Border>
</StackPanel>
</Border>
<Border Grid.Column="2" Style="{StaticResource CardPanel}">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="کارت سلامت"/>
<TextBlock TextWrapping="Wrap" FontSize="11" LineHeight="19"
Foreground="{StaticResource TextSecondaryBrush}">
Leak باید صفر باشد. DNS نشان می‌دهد درخواست‌های DNS هدایت شده‌اند. IPv6 blocked یعنی مسیرهای IPv6 ناخواسته بسته شده‌اند. Route تعداد مسیرهای فعال و خطاها را نشان می‌دهد.
</TextBlock>
</StackPanel>
</Border>
</Grid>
<!-- Troubleshooting -->
<Border Style="{StaticResource CardPanel}">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="عیب‌یابی سریع"/>
<Expander Header="اتصال برقرار نمی‌شود" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,4,0,0">
<TextBlock Text="دسترسی Administrator، فایروال، پورت SOCKS5 و صحت کانفیگ را بررسی کنید. در کانفیگ‌های xhttp، هسته باید Xray باشد."
TextWrapping="Wrap" FontSize="11" LineHeight="19"
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,8,0,0"/>
</Expander>
<Expander Header="ترافیک برنامه از تونل عبور نمی‌کند" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,8,0,0">
<TextBlock Text="برنامه را در تب برنامه‌ها فعال کنید. برای اپ‌های Store، برنامه را باز نگه دارید و لیست برنامه‌ها را دوباره بارگذاری کنید."
TextWrapping="Wrap" FontSize="11" LineHeight="19"
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,8,0,0"/>
</Expander>
<Expander Header="سایت داخلی باید مستقیم باز شود" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,8,0,0">
<TextBlock Text="دامنه یا IP را به استثناها اضافه کنید. برای عبور اجباری یک مقصد از VPN، آن را به لزومی‌ها اضافه کنید."
TextWrapping="Wrap" FontSize="11" LineHeight="19"
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,8,0,0"/>
</Expander>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</UserControl>