This commit is contained in:
snltty
2025-04-21 21:40:34 +08:00
parent 1f5f3c45ec
commit dc02eb5147
60 changed files with 646 additions and 621 deletions

View File

@@ -57,9 +57,9 @@ jobs:
docker tag snltty/linker-musl-x64:latest snltty/linker-musl:amd64 && \
docker push snltty/linker-musl:amd64 && \
docker manifest create snltty/linker-musl:latest snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
docker manifest create snltty/linker-musl:v1.7.3 snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
docker manifest create snltty/linker-musl:v1.7.4 snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
docker manifest push snltty/linker-musl:latest && \
docker manifest push snltty/linker-musl:v1.7.3 && \
docker manifest push snltty/linker-musl:v1.7.4 && \
docker pull --platform linux/arm/v7 snltty/linker-debian-arm:latest && \
docker tag snltty/linker-debian-arm:latest snltty/linker-debian:arm && \
docker push snltty/linker-debian:arm && \
@@ -70,6 +70,6 @@ jobs:
docker tag snltty/linker-debian-x64:latest snltty/linker-debian:amd64 && \
docker push snltty/linker-debian:amd64 && \
docker manifest create snltty/linker-debian:latest snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
docker manifest create snltty/linker-debian:v1.7.3 snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
docker manifest create snltty/linker-debian:v1.7.4 snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
docker manifest push snltty/linker-debian:latest && \
docker manifest push snltty/linker-debian:v1.7.3
docker manifest push snltty/linker-debian:v1.7.4

View File

@@ -33,11 +33,11 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.ACTIONS_TOKEN }}
with:
tag_name: v1.7.3
release_name: v1.7.3.${{ steps.date.outputs.today }}
tag_name: v1.7.4
release_name: v1.7.4.${{ steps.date.outputs.today }}
draft: false
prerelease: false
body: "1. 优化自动分配IP\r\n2. 优化网卡,排除不明数据包\r\n3. 虚拟网卡点对网IP映射用于解决网段冲突\r\n4. 内置应用层SNAT用于无法使用系统NAT的windows系统"
body: "1. 一些优化\r\n2. 内置应用层SNAT用于无法使用系统NetNat的windows系统\r\n3. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它"
- name: publish projects
run: ./publish.bat "C:\\Android\\android-sdk"
- name: upload-win-x86-oss
@@ -49,7 +49,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-win-x86.zip
target-path: /downloads/linker/v1.7.3/linker-win-x86.zip
target-path: /downloads/linker/v1.7.4/linker-win-x86.zip
- name: upload-win-x86
id: upload-win-x86
uses: actions/upload-release-asset@master
@@ -69,7 +69,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-win-x64.zip
target-path: /downloads/linker/v1.7.3/linker-win-x64.zip
target-path: /downloads/linker/v1.7.4/linker-win-x64.zip
- name: upload-win-x64
id: upload-win-x64
uses: actions/upload-release-asset@master
@@ -89,7 +89,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-win-arm64.zip
target-path: /downloads/linker/v1.7.3/linker-win-arm64.zip
target-path: /downloads/linker/v1.7.4/linker-win-arm64.zip
- name: upload-win-arm64
id: upload-win-arm64
uses: actions/upload-release-asset@master
@@ -109,7 +109,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-x64.zip
target-path: /downloads/linker/v1.7.3/linker-linux-x64.zip
target-path: /downloads/linker/v1.7.4/linker-linux-x64.zip
- name: upload-linux-x64
id: upload-linux-x64
uses: actions/upload-release-asset@master
@@ -129,7 +129,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-arm.zip
target-path: /downloads/linker/v1.7.3/linker-linux-arm.zip
target-path: /downloads/linker/v1.7.4/linker-linux-arm.zip
- name: upload-linux-arm
id: upload-linux-arm
uses: actions/upload-release-asset@master
@@ -149,7 +149,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-arm64.zip
target-path: /downloads/linker/v1.7.3/linker-linux-arm64.zip
target-path: /downloads/linker/v1.7.4/linker-linux-arm64.zip
- name: upload-linux-arm64
id: upload-linux-arm64
uses: actions/upload-release-asset@master
@@ -169,7 +169,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-musl-x64.zip
target-path: /downloads/linker/v1.7.3/linker-linux-musl-x64.zip
target-path: /downloads/linker/v1.7.4/linker-linux-musl-x64.zip
- name: upload-linux-musl-x64
id: upload-linux-musl-x64
uses: actions/upload-release-asset@master
@@ -189,7 +189,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-musl-arm.zip
target-path: /downloads/linker/v1.7.3/linker-linux-musl-arm.zip
target-path: /downloads/linker/v1.7.4/linker-linux-musl-arm.zip
- name: upload-linux-musl-arm
id: upload-linux-musl-arm
uses: actions/upload-release-asset@master
@@ -209,7 +209,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-musl-arm64.zip
target-path: /downloads/linker/v1.7.3/linker-linux-musl-arm64.zip
target-path: /downloads/linker/v1.7.4/linker-linux-musl-arm64.zip
- name: upload-linux-musl-arm64
id: upload-linux-musl-arm64
uses: actions/upload-release-asset@master

View File

@@ -44,7 +44,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-ipk/x64/linker-x64.ipk
target-path: /downloads/linker/v1.7.3/linker-x64.ipk
target-path: /downloads/linker/v1.7.4/linker-x64.ipk
- name: upload-x64
id: upload-x64
uses: actions/upload-release-asset@master
@@ -64,7 +64,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-ipk/arm/linker-arm.ipk
target-path: /downloads/linker/v1.7.3/linker-arm.ipk
target-path: /downloads/linker/v1.7.4/linker-arm.ipk
- name: upload-arm
id: upload-arm
uses: actions/upload-release-asset@master
@@ -84,7 +84,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-ipk/arm64/linker-arm64.ipk
target-path: /downloads/linker/v1.7.3/linker-arm64.ipk
target-path: /downloads/linker/v1.7.4/linker-arm64.ipk
- name: upload-arm64
id: upload-arm64
uses: actions/upload-release-asset@master

View File

@@ -47,6 +47,7 @@ jobs:
dotnet build ./src/linker.messenger.tuntap -c release
dotnet build ./src/linker.messenger.updater -c release
dotnet build ./src/linker.tun -c release
dotnet build ./src/linker.snat -c release
dotnet build ./src/linker.tunnel -c release
- name: Pack
@@ -77,34 +78,36 @@ jobs:
dotnet pack ./src/linker.messenger.tuntap -c release
dotnet pack ./src/linker.messenger.updater -c release
dotnet pack ./src/linker.tun -c release
dotnet pack ./src/linker.snat -c release
dotnet pack ./src/linker.tunnel -c release
- name: Push
run: |
dotnet nuget push ./src/linker.libs/bin/release/linker.libs.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger/bin/release/linker.messenger.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.access/bin/release/linker.messenger.access.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.action/bin/release/linker.messenger.action.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.api/bin/release/linker.messenger.api.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.channel/bin/release/linker.messenger.channel.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.decenter/bin/release/linker.messenger.decenter.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.entry/bin/release/linker.messenger.entry.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.exroute/bin/release/linker.messenger.exroute.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.flow/bin/release/linker.messenger.flow.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.forward/bin/release/linker.messenger.forward.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.listen/bin/release/linker.messenger.listen.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.logger/bin/release/linker.messenger.logger.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.pcp/bin/release/linker.messenger.pcp.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.plan/bin/release/linker.messenger.plan.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.relay/bin/release/linker.messenger.relay.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.serializer.memorypack/bin/release/linker.messenger.serializer.memorypack.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.sforward/bin/release/linker.messenger.sforward.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.signin/bin/release/linker.messenger.signin.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.socks5/bin/release/linker.messenger.socks5.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.store.file/bin/release/linker.messenger.store.file.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.sync/bin/release/linker.messenger.sync.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.tunnel/bin/release/linker.messenger.tunnel.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.tuntap/bin/release/linker.messenger.tuntap.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.updater/bin/release/linker.messenger.updater.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.tun/bin/release/linker.tun.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.tunnel/bin/release/linker.tunnel.1.7.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.libs/bin/release/linker.libs.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger/bin/release/linker.messenger.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.access/bin/release/linker.messenger.access.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.action/bin/release/linker.messenger.action.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.api/bin/release/linker.messenger.api.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.channel/bin/release/linker.messenger.channel.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.decenter/bin/release/linker.messenger.decenter.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.entry/bin/release/linker.messenger.entry.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.exroute/bin/release/linker.messenger.exroute.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.flow/bin/release/linker.messenger.flow.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.forward/bin/release/linker.messenger.forward.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.listen/bin/release/linker.messenger.listen.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.logger/bin/release/linker.messenger.logger.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.pcp/bin/release/linker.messenger.pcp.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.plan/bin/release/linker.messenger.plan.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.relay/bin/release/linker.messenger.relay.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.serializer.memorypack/bin/release/linker.messenger.serializer.memorypack.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.sforward/bin/release/linker.messenger.sforward.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.signin/bin/release/linker.messenger.signin.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.socks5/bin/release/linker.messenger.socks5.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.store.file/bin/release/linker.messenger.store.file.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.sync/bin/release/linker.messenger.sync.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.tunnel/bin/release/linker.messenger.tunnel.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.tuntap/bin/release/linker.messenger.tuntap.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.updater/bin/release/linker.messenger.updater.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.tun/bin/release/linker.tun.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.snat/bin/release/linker.snat.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.tunnel/bin/release/linker.tunnel.1.7.4.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols

View File

@@ -85,6 +85,13 @@ Network mapping can help you resolve conflicts between multiple internal network
<p><img src="./readme/mapto.jpg"></p>
</div>
## SNAT
Built-in SNAT enables you to use the point-to-site functionality even on Windows 7/8 and Windows Server 2008/2012 where NetNat is unavailable.
<div align="center">
<p><img src="./readme/snat.jpg"></p>
</div>
## Management Website
<div align="center">

View File

@@ -85,6 +85,13 @@ LinkerMessengerEntry.Setup(ExcludeModule.None);
<p><img src="./readme/mapto.jpg"></p>
</div>
## SNAT
内置的SNAT让你在无法使用NetNat的 win7/8win server 2008/2012上也可以使用点对网功能
<div align="center">
<p><img src="./readme/snat.jpg"></p>
</div>
## 管理页面

View File

@@ -65,6 +65,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.ics", "src\linker.ic
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.plan", "src\linker.messenger.plan\linker.messenger.plan.csproj", "{5649D02E-200B-45E0-A82F-8EBE76CF96C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.snat", "src\linker.snat\linker.snat.csproj", "{A1EA64AA-8C30-4616-B65D-8AF07641807E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -453,6 +455,18 @@ Global
{5649D02E-200B-45E0-A82F-8EBE76CF96C6}.Release|x64.Build.0 = Release|Any CPU
{5649D02E-200B-45E0-A82F-8EBE76CF96C6}.Release|x86.ActiveCfg = Release|Any CPU
{5649D02E-200B-45E0-A82F-8EBE76CF96C6}.Release|x86.Build.0 = Release|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Debug|x64.ActiveCfg = Debug|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Debug|x64.Build.0 = Debug|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Debug|x86.ActiveCfg = Debug|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Debug|x86.Build.0 = Debug|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Release|Any CPU.Build.0 = Release|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Release|x64.ActiveCfg = Release|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Release|x64.Build.0 = Release|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Release|x86.ActiveCfg = Release|Any CPU
{A1EA64AA-8C30-4616-B65D-8AF07641807E}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -33,16 +33,16 @@ do
fi
done
cd public/publish/docker/linux-${p}-x64/${f}
docker buildx build -f ${target}/public/publish/docker/linux-${p}-x64/${f}/Dockerfile-${p} --platform="linux/x86_64" --force-rm -t "${image}-${p}-x64:latest" -t "${image}-${p}-x64:v1.7.3" . --push
docker buildx build -f ${target}/public/publish/docker/linux-${p}-x64/${f}/Dockerfile-${p} --platform="linux/x86_64" --force-rm -t "${image}-${p}-x64:latest" -t "${image}-${p}-x64:v1.7.4" . --push
cd ../../../../../
cd public/publish/docker/linux-${p}-arm64/${f}
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm64/${f}/Dockerfile-${p} --platform="linux/arm64" --force-rm -t "${image}-${p}-arm64:latest" -t "${image}-${p}-arm64:v1.7.3" . --push
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm64/${f}/Dockerfile-${p} --platform="linux/arm64" --force-rm -t "${image}-${p}-arm64:latest" -t "${image}-${p}-arm64:v1.7.4" . --push
cd ../../../../../
cd public/publish/docker/linux-${p}-arm/${f}
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm/${f}/Dockerfile-${p} --platform="linux/arm/v7" --force-rm -t "${image}-${p}-arm:latest" -t "${image}-${p}-arm:v1.7.3" . --push
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm/${f}/Dockerfile-${p} --platform="linux/arm/v7" --force-rm -t "${image}-${p}-arm:latest" -t "${image}-${p}-arm:v1.7.4" . --push
cd ../../../../../
done
done

View File

@@ -22,7 +22,7 @@ do
mkdir -p public/publish-ipk/${r}/data/usr/bin/linker
cp -rf public/publish/${r}/* public/publish-ipk/${r}/data/usr/bin/linker/
sed -i "s|{version}|1.7.3|g" public/publish-ipk/${r}/control/control
sed -i "s|{version}|1.7.4|g" public/publish-ipk/${r}/control/control
sed -i 's/\r$//' public/publish-ipk/${r}/data/etc/init.d/linker
sed -i 's/\r$//' public/publish-ipk/${r}/control/control
sed -i 's/\r$//' public/publish-ipk/${r}/control/postinst

233
readme/snat.drawio Normal file

File diff suppressed because one or more lines are too long

BIN
readme/snat.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

View File

@@ -28,7 +28,7 @@
<ApplicationId>com.snltty.linker.app</ApplicationId>
<Title>linker.app</Title>
<Version>1.7.3</Version>
<Version>1.7.4</Version>
<Authors>snltty</Authors>
<Company>snltty</Company>
<Copyright>snltty</Copyright>
@@ -38,7 +38,7 @@
<PackageReleaseNotes>linker</PackageReleaseNotes>
<!-- Versions -->
<ApplicationDisplayVersion>1.7.3</ApplicationDisplayVersion>
<ApplicationDisplayVersion>1.7.4</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">11.0</SupportedOSPlatformVersion>

View File

@@ -15,7 +15,14 @@ sidebar_position: 2
:::tip[1、情况1你的设备支持NAT转发时]
1. linux已经自动添加NAT转发(在`OpenWrt`,需要在`防火墙 - 区域设置`中将`转发`设置为`接受`)
2. windows优先使用系统NetNatNetNat失败则启用内置的应用层SNAT但是性能应该没有NetNat好
2. windows优先使用系统`NetNat``NetNat`失败则启用`内置SNAT`,但是性能应该没有`NetNat`
1. 由于`内置SNAT`依赖`WinDivert驱动`,如果报错`Windows 无法验证此文件的数字签名`什么的,可以尝试以下两种解决办法
2. 使用`管理员身份运行cmd`执行以下两条命令,然后重启系统
```
BCDEDIT -SET LOADOPTIONS DISABLE_INTEGRITY_CHECKS
BCDEDIT -SET TESTSIGNING ON
```
3. 或者安装一个<a href="https://www.microsoft.com/zh-cn/download/details.aspx?id=46148" target="_blank">KB3033929补丁</a>,然后重启系统
3. macos需要你自己在**被访问端**添加NAT转发
```
# 开启ip转发
@@ -27,12 +34,12 @@ nat on en0 from 10.18.18.0/24 to any -> (en0)
sudo pfctl -f /etc/pf.conf -e
```
:::danger[重点]
1. 如图配置第一条配置,`目标IP`填写`0.0.0.0`,则`路由IP`就是真实内网网段,其它客户端可以通过`192.168.1.0/24`网段访问到`公司城中-linux`的`192.168.1.0/24`网段
2. 如图配置第二条配置,`目标IP`填写`192.168.1.0/24`,则`路由IP`伪虚假网段,`目标IP`为真实内网网段,其它客户端可以通过一个`假的` `192.168.18.0/24`网段访问到`公司城中-linux`的`192.168.1.0/24`网段
3. 网段映射其实就是 按`目标IP``目标掩码`计算出网络号,将网络号覆盖`路由IP`得到最终的访问IP
4. 当前网段映射仅支持IPV4`ICMP``TCP``UDP`、如需更多协议,请联系作者添加
3. 注意,两条配置不能同时使用
4. 网段映射其实就是 按`目标IP``目标掩码`计算出网络号,将网络号覆盖`路由IP`得到最终的访问IP
5. 当前网段映射仅支持IPV4`ICMP`、`TCP`、`UDP`、如需更多协议,请联系作者添加
![Docusaurus Plushie](./img/tuntap12n-1.jpg)
![Docusaurus Plushie](./img/tuntap12n-2.jpg)

View File

@@ -14,9 +14,9 @@
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType>

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger api access</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger api action</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -17,9 +17,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger api</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger channel</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger decenter</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger entry</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger exroute</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -17,9 +17,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger flow</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -17,9 +17,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger forward</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -17,9 +17,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger listen</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger logger</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -17,9 +17,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger pcp</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger plan</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -18,9 +18,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger relay</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger serializer aot</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger serializer memorypack</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger sforward</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -17,9 +17,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger signin</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger socks5</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger store file</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -18,9 +18,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger sync</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger tunnel</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -75,7 +75,11 @@ namespace linker.messenger.tuntap
//配置有更新,去同步一下
tuntapConfigTransfer.OnUpdate += () =>
{
SetMaps(); AddForward(); _ = CheckDevice(); tuntapDecenter.Refresh();
tuntapDecenter.Refresh();
SetMaps();
SetAppNat();
AddForward();
_ = CheckDevice();
};
//隧道回调

View File

@@ -162,10 +162,7 @@ namespace linker.messenger.tuntap
/// <param name="items"></param>
public void SetAppNat(LinkerTunAppNatItemInfo[] items)
{
if (string.IsNullOrWhiteSpace(NatError) == false)
{
linkerTunDeviceAdapter.SetAppNat(items);
}
linkerTunDeviceAdapter.SetAppNat(items);
}
/// <summary>

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger tuntap</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger updater</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -7,9 +7,11 @@ using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
namespace linker.tun
namespace linker.snat
{
/// <summary>
/// 64位放x64的WinDivert.dll和WinDivert64.sys
/// 32位放x86的WinDivert.dll和WinDivert64.sysWinDivert.sys
/// 应用层简单SNAT
/// 1收到【客户端A】的数据包10.18.18.23(客户端A的虚拟网卡IP)->192.168.56.6(局域网IP)
/// 2改为 192.168.56.2(本机IP)->192.168.56.6(局域网IP)
@@ -17,7 +19,7 @@ namespace linker.tun
/// 4改为 192.168.56.6(局域网IP)->10.18.18.23(客户端A的虚拟网卡IP)
/// 5回到客户端A就完成了NAT
/// </summary>
public sealed class WinDivertNAT
public sealed class LinkerSNat
{
public bool Running => winDivert != null;
@@ -31,7 +33,9 @@ namespace linker.tun
/// </summary>
private NetworkIPv4Addr interfaceAddr;
private uint srcIp;
private NetworkIPv4Addr srcAddr;
/// <summary>
/// 用来注入数据包
@@ -53,7 +57,7 @@ namespace linker.tun
/// </summary>
private ConcurrentDictionary<(uint src, ushort port), ushort> source2portMap = new ConcurrentDictionary<(uint src, ushort port), ushort>();
public WinDivertNAT()
public LinkerSNat()
{
}
@@ -63,7 +67,7 @@ namespace linker.tun
/// <param name="src">虚拟网卡IP</param>
/// <param name="dsts">需要NAT的IP</param>
/// <param name="interfaceIp">本地网卡IP</param>
/// <param name="error">false的时候会有报错信息</param>
/// <param name="error">false启动失败的时候会有报错信息</param>
/// <returns></returns>
public bool Setup(IPAddress src, AddrInfo[] dsts, IPAddress interfaceIp, out string error)
{
@@ -76,16 +80,24 @@ namespace linker.tun
}
if (src == null || dsts == null || dsts.Length == 0)
{
error = "src is null, or dsts empty";
error = "src is null, or dsts emptysnat fail";
return false;
}
if (interfaceIp == null || interfaceIp.Equals(IPAddress.Any))
{
error = "snat need default interface ipaddres";
return false;
}
try
{
srcIp = NetworkHelper.ToValue(src);
srcAddr = IPv4Addr.Parse(src.ToString());
interfaceAddr = IPv4Addr.Parse(interfaceIp.ToString());
winDivert = new WinDivert(BuildFilter(dsts), WinDivert.Layer.Network, 0, 0);
cts = new CancellationTokenSource();
Recv(cts);
ClearTask(cts);
@@ -164,17 +176,20 @@ namespace linker.tun
}
}
/// <summary>
/// 注入数据包,让它直接走正确的网卡,路由到目的地
/// 注入TCP/IP,让它直接走正确的网卡,路由到目的地
/// </summary>
/// <param name="buffer"></param>
/// <param name="packet">单个完整TCP/IP包</param>
/// <returns>true注入成功false失败了你可以继续写入你的虚拟网卡</returns>
public unsafe bool Inject(ReadOnlyMemory<byte> packet)
{
if (winDivert == null) return false;
IPV4Packet ipv4 = new IPV4Packet(packet.Span);
//不是 ipv4是虚拟网卡ip是广播不nat
if (ipv4.Version != ProtocolType.IPv4 || ipv4.DstAddr == srcIp || ipv4.DstAddrSpan.GetIsBroadcastAddress()) return false;
if (ipv4.Version != ProtocolType.IPv4 || ipv4.DstAddr == srcIp || ipv4.DstAddrSpan.GetIsBroadcastAddress())
{
return false;
}
fixed (byte* ptr = packet.Span)
{
foreach (var (i, p) in new WinDivertIndexedPacketParser(packet))
@@ -229,7 +244,8 @@ namespace linker.tun
SrcAddr = p.IPv4Hdr->SrcAddr,
Identifier0 = *ptr0,
Identifier1 = *ptr1,
LastTime = Environment.TickCount64
LastTime = Environment.TickCount64,
Timeout = 15 * 1000 //icmp 15秒
};
natMap.AddOrUpdate(key, natMapInfo, (a, b) => natMapInfo);
@@ -298,7 +314,8 @@ namespace linker.tun
{
SrcAddr = p.IPv4Hdr->SrcAddr,
SrcPort = p.TCPHdr->SrcPort,
LastTime = Environment.TickCount64
LastTime = Environment.TickCount64,
Timeout = 2 * 60 * 60 * 1000 //tcp 2小时
};
natMap.TryAdd(key, natMapInfo);
}
@@ -361,7 +378,8 @@ namespace linker.tun
{
SrcAddr = p.IPv4Hdr->SrcAddr,
SrcPort = p.UDPHdr->SrcPort,
LastTime = Environment.TickCount64
LastTime = Environment.TickCount64,
Timeout = 30 * 60 * 1000 //UDP 30分钟
};
natMap.TryAdd(key, natMapInfo);
}
@@ -422,7 +440,7 @@ namespace linker.tun
TimerHelper.SetIntervalLong(() =>
{
long now = Environment.TickCount64;
foreach (var item in natMap.Where(c => now - c.Value.LastTime > 1 * 60 * 60 || c.Value.FinAck || c.Value.Rst).Select(c => c.Key).ToList())
foreach (var item in natMap.Where(c => now - c.Value.LastTime > c.Value.Timeout || c.Value.FinAck || c.Value.Rst).Select(c => c.Key).ToList())
{
if (natMap.TryRemove(item, out NatMapInfo natMapInfo))
{
@@ -481,6 +499,7 @@ namespace linker.tun
public bool Rst { get; set; }
public long LastTime { get; set; } = Environment.TickCount64;
public int Timeout { get; set; } = 1 * 60 * 60;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,43 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PublishAot>false</PublishAot>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
<Title>linker snat</Title>
<Authors>snltty</Authors>
<Company>snltty</Company>
<Description>linker snat</Description>
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker snat</PackageReleaseNotes>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
<Optimize>True</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<project ver="10" name="linker.tray.win" libEmbed="true" icon="..\linker\favicon.ico" ui="win" output="linker.tray.win.exe" CompanyName="snltty" FileDescription="linker.tray.win" LegalCopyright="Copyright (C) snltty 2024" ProductName="linker.tray.win" InternalName="linker.install.win" FileVersion="0.0.0.247" ProductVersion="0.0.0.247" publishDir="/dist/" dstrip="false" local="false" ignored="false">
<project ver="10" name="linker.tray.win" libEmbed="true" icon="..\linker\favicon.ico" ui="win" output="linker.tray.win.exe" CompanyName="snltty" FileDescription="linker.tray.win" LegalCopyright="Copyright (C) snltty 2024" ProductName="linker.tray.win" InternalName="linker.install.win" FileVersion="0.0.0.250" ProductVersion="0.0.0.250" publishDir="/dist/" dstrip="false" local="false" ignored="false">
<file name="main.aardio" path="main.aardio" comment="main.aardio"/>
<folder name="资源文件" path="res" embed="true" local="false" ignored="false">
<file name="favicon.ico" path="res\favicon.ico" comment="res\favicon.ico"/>

Binary file not shown.

View File

@@ -1 +1 @@
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>linker.web</title><link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/><script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script><script defer="defer" src="js/chunk-vendors.cfba5739.js"></script><script defer="defer" src="js/app.1acc2fd0.js"></script><link href="css/chunk-vendors.d8267b33.css" rel="stylesheet"><link href="css/app.73965826.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but linker.web doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>linker.web</title><link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/><script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script><script defer="defer" src="js/chunk-vendors.cfba5739.js"></script><script defer="defer" src="js/app.8014d169.js"></script><link href="css/chunk-vendors.d8267b33.css" rel="stylesheet"><link href="css/app.73965826.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but linker.web doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

View File

@@ -1 +1 @@
"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[743],{427:function(e,n,a){a.r(n),a.d(n,{default:function(){return O}});var t=a(6768);const s={class:"net-wrap app-wrap"},l={class:"inner absolute flex flex-column flex-nowrap"},i={class:"head"},o={class:"body flex-1 relative"},c={class:"status"};function r(e,n,a,r,u,d){const g=(0,t.g2)("Head"),p=(0,t.g2)("List"),v=(0,t.g2)("Status");return(0,t.uX)(),(0,t.CE)("div",s,[(0,t.Lk)("div",l,[(0,t.Lk)("div",i,[(0,t.bF)(g)]),(0,t.Lk)("div",o,[(0,t.bF)(p)]),(0,t.Lk)("div",c,[(0,t.bF)(v,{config:!1})])])])}a(4114);const u=e=>((0,t.Qi)("data-v-1fd9ef80"),e=e(),(0,t.jt)(),e),d={class:"head-wrap"},g={class:"tools flex"},p=u((()=>(0,t.Lk)("span",{class:"label"},"服务器 ",-1))),v=u((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1))),h={style:{"margin-left":"1rem"}};function f(e,n,a,s,l,i){const o=(0,t.g2)("el-input"),c=(0,t.g2)("Refresh"),r=(0,t.g2)("el-icon"),u=(0,t.g2)("el-button"),f=(0,t.g2)("Background");return(0,t.uX)(),(0,t.CE)("div",d,[(0,t.Lk)("div",g,[p,(0,t.bF)(o,{modelValue:s.state.server,"onUpdate:modelValue":n[0]||(n[0]=e=>s.state.server=e),readonly:"",style:{width:"14rem"},size:"small"},null,8,["modelValue"]),v,(0,t.bF)(u,{size:"small",onClick:s.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)(" 刷新(F5)"),(0,t.bF)(r,null,{default:(0,t.k6)((()=>[(0,t.bF)(c)])),_:1})])),_:1},8,["onClick"]),(0,t.Lk)("div",h,[(0,t.bF)(f,{name:"net"})])])])}var k=a(3830),m=a(144),C=a(7477),b=a(5096),L={components:{Edit:C.ffu,Refresh:C.C42,Background:b.A},setup(){const e=(0,k.B)(),n=(0,m.Kh)({server:(0,t.EW)((()=>e.value.config.Client.Server.Host))}),a=()=>{window.location.reload()};return{state:n,handleRefresh:a}}},_=a(1241);const w=(0,_.A)(L,[["render",f],["__scopeId","data-v-1fd9ef80"]]);var F=w;const S=e=>((0,t.Qi)("data-v-68d1c30a"),e=e(),(0,t.jt)(),e),x={class:"net-list-wrap flex flex-column absolute"},T={class:"flex-1 scrollbar"},z={class:"flex"},E=S((()=>(0,t.Lk)("div",{class:"flex-1"},null,-1))),A={class:"tuntap"},I={class:"page t-c"},P={class:"page-wrap t-c"};function B(e,n,a,s,l,i){const o=(0,t.g2)("DeviceName"),c=(0,t.g2)("UpdaterBtn"),r=(0,t.g2)("TuntapShow"),u=(0,t.g2)("el-pagination");return(0,t.uX)(),(0,t.CE)("div",x,[(0,t.Lk)("div",T,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(s.devices.page.List,((e,n)=>((0,t.uX)(),(0,t.CE)("li",{key:n},[(0,t.Lk)("dl",null,[(0,t.Lk)("dt",z,[(0,t.Lk)("div",null,[(0,t.bF)(o,{item:e},null,8,["item"])]),E,(0,t.Lk)("div",null,[(0,t.bF)(c,{config:!1,item:e},null,8,["item"])])]),(0,t.Lk)("dd",A,[s.tuntap.list[e.MachineId]?((0,t.uX)(),(0,t.Wv)(r,{key:0,item:e},null,8,["item"])):(0,t.Q3)("",!0)])])])))),128))])]),(0,t.Lk)("div",I,[(0,t.Lk)("div",P,[(0,t.bF)(u,{size:"small",background:"",layout:"prev,pager, next","pager-count":5,total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])])])}var y=a(8104),R=a(7985),D=a(9383),U=a(7115),X=a(6588),V=a(7163),N=a(9983),Q={components:{StarFilled:C.BQ2,UpdaterBtn:U.A,DeviceName:X.A,TuntapShow:V.A},setup(e){(0,k.B)();const n=(0,m.Kh)({}),{devices:a,machineId:s,_getSignList:l,_getSignList1:i,handleDeviceEdit:o,handlePageChange:c,handlePageSizeChange:r,handleDel:u,clearDevicesTimeout:d}=(0,R.r)(),{tuntap:g,_getTuntapInfo:p,handleTuntapRefresh:v,clearTuntapTimeout:h,handleTuntapEdit:f,sortTuntapIP:C}=(0,y.O)(),{_getUpdater:b,_subscribeUpdater:L,clearUpdaterTimeout:_}=(0,D.d)(),{connections:w,forwardConnections:F,_getForwardConnections:S,tuntapConnections:x,_getTuntapConnections:T,socks5Connections:z,_getSocks5Connections:E,handleTunnelConnections:A,clearConnectionsTimeout:I}=(0,N.L2)();return(0,t.sV)((()=>{c(),v(),l(),i(),p(),b(),L()})),(0,t.hi)((()=>{d(),h(),_()})),{state:n,devices:a,machineId:s,handlePageChange:c,handlePageSizeChange:r,tuntap:g}}};const H=(0,_.A)(Q,[["render",B],["__scopeId","data-v-68d1c30a"]]);var K=H,W=a(6743),j=a(1387),q={components:{Head:F,List:K,Status:W.A},setup(){document.addEventListener("contextmenu",(function(e){e.preventDefault()}));const e=(0,k.B)(),n=(0,j.rd)();return(0,t.sV)((()=>{0==e.value.hasAccess("NetManager")&&n.push({name:"NoPermission"})})),{}}};const M=(0,_.A)(q,[["render",r],["__scopeId","data-v-6a3f3b43"]]);var O=M}}]);
"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[922],{427:function(e,n,a){a.r(n),a.d(n,{default:function(){return O}});var t=a(6768);const s={class:"net-wrap app-wrap"},l={class:"inner absolute flex flex-column flex-nowrap"},i={class:"head"},o={class:"body flex-1 relative"},c={class:"status"};function r(e,n,a,r,u,d){const g=(0,t.g2)("Head"),p=(0,t.g2)("List"),v=(0,t.g2)("Status");return(0,t.uX)(),(0,t.CE)("div",s,[(0,t.Lk)("div",l,[(0,t.Lk)("div",i,[(0,t.bF)(g)]),(0,t.Lk)("div",o,[(0,t.bF)(p)]),(0,t.Lk)("div",c,[(0,t.bF)(v,{config:!1})])])])}a(4114);const u=e=>((0,t.Qi)("data-v-1fd9ef80"),e=e(),(0,t.jt)(),e),d={class:"head-wrap"},g={class:"tools flex"},p=u((()=>(0,t.Lk)("span",{class:"label"},"服务器 ",-1))),v=u((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1))),h={style:{"margin-left":"1rem"}};function f(e,n,a,s,l,i){const o=(0,t.g2)("el-input"),c=(0,t.g2)("Refresh"),r=(0,t.g2)("el-icon"),u=(0,t.g2)("el-button"),f=(0,t.g2)("Background");return(0,t.uX)(),(0,t.CE)("div",d,[(0,t.Lk)("div",g,[p,(0,t.bF)(o,{modelValue:s.state.server,"onUpdate:modelValue":n[0]||(n[0]=e=>s.state.server=e),readonly:"",style:{width:"14rem"},size:"small"},null,8,["modelValue"]),v,(0,t.bF)(u,{size:"small",onClick:s.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)(" 刷新(F5)"),(0,t.bF)(r,null,{default:(0,t.k6)((()=>[(0,t.bF)(c)])),_:1})])),_:1},8,["onClick"]),(0,t.Lk)("div",h,[(0,t.bF)(f,{name:"net"})])])])}var k=a(3830),m=a(144),C=a(7477),b=a(5096),L={components:{Edit:C.ffu,Refresh:C.C42,Background:b.A},setup(){const e=(0,k.B)(),n=(0,m.Kh)({server:(0,t.EW)((()=>e.value.config.Client.Server.Host))}),a=()=>{window.location.reload()};return{state:n,handleRefresh:a}}},_=a(1241);const w=(0,_.A)(L,[["render",f],["__scopeId","data-v-1fd9ef80"]]);var F=w;const S=e=>((0,t.Qi)("data-v-68d1c30a"),e=e(),(0,t.jt)(),e),x={class:"net-list-wrap flex flex-column absolute"},T={class:"flex-1 scrollbar"},z={class:"flex"},E=S((()=>(0,t.Lk)("div",{class:"flex-1"},null,-1))),A={class:"tuntap"},I={class:"page t-c"},P={class:"page-wrap t-c"};function B(e,n,a,s,l,i){const o=(0,t.g2)("DeviceName"),c=(0,t.g2)("UpdaterBtn"),r=(0,t.g2)("TuntapShow"),u=(0,t.g2)("el-pagination");return(0,t.uX)(),(0,t.CE)("div",x,[(0,t.Lk)("div",T,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(s.devices.page.List,((e,n)=>((0,t.uX)(),(0,t.CE)("li",{key:n},[(0,t.Lk)("dl",null,[(0,t.Lk)("dt",z,[(0,t.Lk)("div",null,[(0,t.bF)(o,{item:e},null,8,["item"])]),E,(0,t.Lk)("div",null,[(0,t.bF)(c,{config:!1,item:e},null,8,["item"])])]),(0,t.Lk)("dd",A,[s.tuntap.list[e.MachineId]?((0,t.uX)(),(0,t.Wv)(r,{key:0,item:e},null,8,["item"])):(0,t.Q3)("",!0)])])])))),128))])]),(0,t.Lk)("div",I,[(0,t.Lk)("div",P,[(0,t.bF)(u,{size:"small",background:"",layout:"prev,pager, next","pager-count":5,total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])])])}var y=a(8104),R=a(7985),D=a(9383),U=a(7115),X=a(6588),V=a(3694),N=a(9983),Q={components:{StarFilled:C.BQ2,UpdaterBtn:U.A,DeviceName:X.A,TuntapShow:V.A},setup(e){(0,k.B)();const n=(0,m.Kh)({}),{devices:a,machineId:s,_getSignList:l,_getSignList1:i,handleDeviceEdit:o,handlePageChange:c,handlePageSizeChange:r,handleDel:u,clearDevicesTimeout:d}=(0,R.r)(),{tuntap:g,_getTuntapInfo:p,handleTuntapRefresh:v,clearTuntapTimeout:h,handleTuntapEdit:f,sortTuntapIP:C}=(0,y.O)(),{_getUpdater:b,_subscribeUpdater:L,clearUpdaterTimeout:_}=(0,D.d)(),{connections:w,forwardConnections:F,_getForwardConnections:S,tuntapConnections:x,_getTuntapConnections:T,socks5Connections:z,_getSocks5Connections:E,handleTunnelConnections:A,clearConnectionsTimeout:I}=(0,N.L2)();return(0,t.sV)((()=>{c(),v(),l(),i(),p(),b(),L()})),(0,t.hi)((()=>{d(),h(),_()})),{state:n,devices:a,machineId:s,handlePageChange:c,handlePageSizeChange:r,tuntap:g}}};const H=(0,_.A)(Q,[["render",B],["__scopeId","data-v-68d1c30a"]]);var K=H,W=a(6743),j=a(1387),q={components:{Head:F,List:K,Status:W.A},setup(){document.addEventListener("contextmenu",(function(e){e.preventDefault()}));const e=(0,k.B)(),n=(0,j.rd)();return(0,t.sV)((()=>{0==e.value.hasAccess("NetManager")&&n.push({name:"NoPermission"})})),{}}};const M=(0,_.A)(q,[["render",r],["__scopeId","data-v-6a3f3b43"]]);var O=M}}]);

View File

@@ -1,5 +1,6 @@
using linker.libs;
using linker.libs.extends;
using linker.snat;
using System.Buffers.Binary;
using System.Net;
using System.Net.NetworkInformation;
@@ -16,6 +17,7 @@ namespace linker.tun
public string Name => name;
public bool Running => session != 0;
public bool AppNat => winDivertNAT != null && winDivertNAT.Running;
private bool systemNat = false;
private IntPtr waitHandle = IntPtr.Zero, adapter = IntPtr.Zero, session = IntPtr.Zero;
private int interfaceNumber = 0;
@@ -30,7 +32,7 @@ namespace linker.tun
private CancellationTokenSource tokenSource;
private WinDivertNAT winDivertNAT = new WinDivertNAT();
private LinkerSNat winDivertNAT = new LinkerSNat();
public LinkerWinTunDevice()
{
@@ -189,14 +191,14 @@ namespace linker.tun
public void SetSystemNat(out string error)
{
error = "test app nat";
return;
error = string.Empty;
if (address == null || address.Equals(IPAddress.Any)) return;
try
{
if (address == null || address.Equals(IPAddress.Any) || prefixLength == 0)
{
error = "NetNat need CIDR,like 10.18.18.0/24";
return;
}
CommandHelper.PowerShell($"start-service WinNat", [], out error);
CommandHelper.PowerShell($"Install-WindowsFeature -Name Routing -IncludeManagementTools", [], out error);
CommandHelper.PowerShell($"Set-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\" -Name \"IPEnableRouter\" -Value 1", [], out error);
@@ -216,11 +218,25 @@ namespace linker.tun
{
error = ex.Message;
}
finally
{
systemNat = string.IsNullOrWhiteSpace(error);
}
}
public void SetAppNat(LinkerTunAppNatItemInfo[] items, out string error)
{
winDivertNAT.Shutdown();
winDivertNAT.Setup(address, items.Select(c => new WinDivertNAT.AddrInfo(c.IP, c.PrefixLength)).ToArray(), defaultInterfaceIP, out error);
error = string.Empty;
if (address == null || address.Equals(IPAddress.Any))
{
error = "NetNat need CIDR,like 10.18.18.0/24";
return;
}
if (systemNat == false)
{
winDivertNAT.Shutdown();
winDivertNAT.Setup(address, items.Select(c => new LinkerSNat.AddrInfo(c.IP, c.PrefixLength)).ToArray(), defaultInterfaceIP, out error);
}
}
public void RemoveNat(out string error)
{

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker tun</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -38,6 +38,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
<ProjectReference Include="..\linker.snat\linker.snat.csproj" />
</ItemGroup>
</Project>

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker tunnel</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -10,16 +10,14 @@
<template v-else-if="tuntap.list[item.MachineId].Upgrade && tuntap.list[item.MachineId].NatError">
<strong class="yellow" :title="tuntap.list[item.MachineId].NatError">{{ tuntap.list[item.MachineId].IP }}</strong>
</template>
<template v-else-if="tuntap.list[item.MachineId].AppNat">
<strong class="app-nat" title="虚拟网卡IP系统NAT失败已启用内置应用层SNAT">{{ tuntap.list[item.MachineId].IP }}</strong>
<template v-else-if="tuntap.list[item.MachineId].AppNat && tuntap.list[item.MachineId].running">
<strong class="app-nat" :title="`虚拟网卡IP\r\n应用层SNAT\r\n如果无法使用点对网请重启一次系统`">{{ tuntap.list[item.MachineId].IP }}</strong>
</template>
<template v-else-if=" item.Connected && tuntap.list[item.MachineId].running">
<strong class="green gateway" :title="`虚拟网卡IP\r\n系统NAT`">{{ tuntap.list[item.MachineId].IP }}</strong>
</template>
<template v-else>
<template v-if=" item.Connected && tuntap.list[item.MachineId].running">
<strong class="green gateway">{{ tuntap.list[item.MachineId].IP }}</strong>
</template>
<template v-else>
<strong>{{ tuntap.list[item.MachineId].IP }}</strong>
</template>
<strong>{{ tuntap.list[item.MachineId].IP }}</strong>
</template>
</a>
</div>

View File

@@ -20,17 +20,16 @@
<Title>linker</Title>
<Authors>snltty</Authors>
<Company>snltty</Company>
<Description>1. 优化自动分配IP
2. 优化网卡,排除不明数据包
3. 虚拟网卡点对网IP映射用于解决网段冲突
4. 内置应用层SNAT用于无法使用系统NAT的windows系统</Description>
<Description>1. 一些优化
2. 内置应用层SNAT用于无法使用系统NetNat的windows系统
3. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它</Description>
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker</PackageReleaseNotes>
<Version>1.7.3</Version>
<AssemblyVersion>1.7.3</AssemblyVersion>
<FileVersion>1.7.3</FileVersion>
<Version>1.7.4</Version>
<AssemblyVersion>1.7.4</AssemblyVersion>
<FileVersion>1.7.4</FileVersion>
<DelaySign>False</DelaySign>
</PropertyGroup>

View File

@@ -1,6 +1,5 @@
v1.7.3
2025-04-20 17:31:17
1. 优化自动分配IP
2. 优化网卡,排除不明数据包
3. 虚拟网卡点对网IP映射用于解决网段冲突
4. 内置应用层SNAT用于无法使用系统NAT的windows系统
v1.7.4
2025-04-21 21:40:33
1. 一些优化
2. 内置应用层SNAT用于无法使用系统NetNat的windows系统
3. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它

View File

@@ -47,6 +47,7 @@ jobs:
dotnet build ./src/linker.messenger.tuntap -c release
dotnet build ./src/linker.messenger.updater -c release
dotnet build ./src/linker.tun -c release
dotnet build ./src/linker.snat -c release
dotnet build ./src/linker.tunnel -c release
- name: Pack
@@ -77,6 +78,7 @@ jobs:
dotnet pack ./src/linker.messenger.tuntap -c release
dotnet pack ./src/linker.messenger.updater -c release
dotnet pack ./src/linker.tun -c release
dotnet pack ./src/linker.snat -c release
dotnet pack ./src/linker.tunnel -c release
- name: Push
@@ -107,4 +109,5 @@ jobs:
dotnet nuget push ./src/linker.messenger.tuntap/bin/release/linker.messenger.tuntap.{{version}}.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.messenger.updater/bin/release/linker.messenger.updater.{{version}}.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.tun/bin/release/linker.tun.{{version}}.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.snat/bin/release/linker.snat.{{version}}.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
dotnet nuget push ./src/linker.tunnel/bin/release/linker.tunnel.{{version}}.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols