heiher / natmap

TCP/UDP port mapping for full cone NAT
MIT License
1.3k stars 98 forks source link

请求在wireguard安卓客户端增加TXT记录解析 #63

Closed xf110 closed 2 days ago

xf110 commented 4 months ago

wireguard安卓客户端能直接解析IP4P很不错,但是在没有v6的环境中还需手动设置dns服务器为223.5.5.5,不方便。能不能在安卓客户端加入直接解析txt记录的功能?比如域名123.abc.com的txt记录为打洞获取的公网地址和端口123.45.23.66:7899 ,就像直接解析ip4p一个效果,这样无论在什么环境下都不用特殊设置。

lmq8267 commented 4 months ago

设置dns也不行解析不了 参考这里 ip4p存在的问题 帖子中标注的 不过确实txt记录更全面 通用性更强 ,通过ddns脚本 将生成的ip 端口 解析域名 就方便多了

heiher commented 4 months ago

IP4P在一些操作系统上使用系统内置的DNS解析API的确会有依赖配置IPv6地址的问题,不过这可以换DNS解析实现来解决。

之前我是比较担心运营商的DNS服务器对TXT记录可能不会像A/AAAA记录那样进行友好的缓存,导致解析延迟会比较大。我这实测了一下TXT记录,运营商的DNS服务器有比较高的概率不返回结果,而AAAA记录则非常稳定。(不知道是不是个例

lmq8267 commented 4 months ago

这个组网插件 增加了txt域名地址 使用起来很方便 没有延迟的问题 将natmap生成的ip和端口 以IP:端口解析到域名的txt记录 这个插件就填写域名 就能链接到服务器了 很方便 所以很期望增加wireguardAPP的txt记录

Caiminoyume commented 4 months ago

DNS 已经存在指示 port 的SRV (type 64) 记录了,建议直接使用 SRV 记录

AkashiCoin commented 4 months ago

作为记录ip和端口,建议使用SRV记录更为合适

heiher commented 4 months ago

SRV要做两次解析,IP地址一次,端口一次。当初的考虑是倾向于只做一次解析,缓存友好,且客户端解析实现简单。

dmserver commented 4 months ago

https://cloud.tencent.com/document/product/302/12648

SRV做两次解析,IP地址一次,端口一次。最初的考虑是倾向于只做一次解析,缓存方式,且客户端解析实现简单。

其实解析这个不需要担心,只要适配了,他们有办法去更新记录,如果可以的话 txt srv ip4p都有最好

egg1234 commented 5 days ago

应该可以通过下面的项目解决向客户端或对端共享/报告打洞后的出口IP地址及端口的问题,而且对脚本更友好 https://github.com/Violet-sword/Exchange-Variable

AkashiCoin commented 5 days ago

应该可以通过下面的项目解决向客户端或对端共享/报告打洞后的出口IP地址及端口的问题,而且对脚本更友好 https://github.com/Violet-sword/Exchange-Variable

这种法子有点过于麻烦了,好的做法还是应该在dns上做解析而不是用第三方

zhcode-fun commented 3 days ago

可以试试我魔改的版本 https://github.com/zhcode-fun/wireguard-android

如果需要windows版本的,在这 https://github.com/zhcode-fun/wireguard-windows

lmq8267 commented 3 days ago

大佬 可否改下这个wg工具

zhcode-fun commented 3 days ago

大佬 可否改下这个wg工具

不好意思,我对 C 一窍不通

lmq8267 commented 3 days ago

编译的时候 提示 WARNING: ./ui/build/intermediates/merged_java_res/googleplay/mergeGoogleplayJavaResource/base.jar: R8: Unexpected reference to missing service class: META-INF/services/java.net.spi.InetAddressResolverProvider.

zhcode-fun commented 3 days ago

编译的时候 提示 WARNING: ./ui/build/intermediates/merged_java_res/googleplay/mergeGoogleplayJavaResource/base.jar: R8: Unexpected reference to missing service class: META-INF/services/java.net.spi.InetAddressResolverProvider.

我在README加了编译步骤,如果还有问题,在wireguard-android/issues里问吧

xf110 commented 3 days ago

wireguard (ip4p,txt,srv).zip 已经做出来了,支持ip4p,ipv6,txt,srv记录解析,端口填0是srv,填1是txt,ip4p记录填0、1以外的端口。感谢zhcode-fun

lmq8267 commented 3 days ago

附带一个github的云编译模板,方便自行修改代码打包apk

name: build-android-wireguard

on:
   workflow_dispatch:
    inputs:
      password:
        description: '请输入签名证书密码:(不支持中文密码,且最少6位字符)'
        required: false
        default: 'password'
env:
  password: "${{ github.event.inputs.password }}"
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 检查仓库
        uses: actions/checkout@v4
        with:
         repository: zhcode-fun/wireguard-android #使用zhcode-fun大佬的wireguard-android仓库
         ref: dev-v1.0.20231018.1 #使用dev-v1.0.20231018.1分支
         submodules: true
      - name: 设置JDK环境
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: 17
      - name: 构建 APK
        run: |
         sed -i '/signingConfig = signingConfigs.getByName("release")/d' ./ui/build.gradle.kts
         sed -i 's|//\s*\(abiFilters.add("armeabi-v7a")\)|\1|' ./ui/build.gradle.kts
         sed -i 's|//\s*\(abiFilters.add("armeabi-v7a")\)|\1|' ./tunnel/build.gradle.kts
         bash ./gradlew assembleRelease
      - name: 签名
        run: |
         mkdir -p /opt/wg
         mv ./ui/build/outputs/apk/release/ui-release-unsigned.apk /opt/wg/app-release-unsigned.apk
         cd /opt/wg
         #生成签名文件keystore.jks
         keytool -genkey -v -keystore keystore.jks -storepass $password -alias key -keypass $password -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android, OU=Android, O=Android, L=BeiJing, ST=BeiJing, C=CN"
         #启用谷歌v1 v2 v3 v4 签名方式同时签名
         /usr/local/lib/android/sdk/build-tools/34.0.0/apksigner sign --ks keystore.jks --ks-key-alias key --ks-pass pass:$password --key-pass pass:$password --out wireguard-android.apk --in app-release-unsigned.apk --v1-signing-enabled true --v2-signing-enabled true --v3-signing-enabled true --v4-signing-enabled true
         rm app-release-unsigned.apk
      - name : 上传
        uses: actions/upload-artifact@master
        if: always()
        with:
         name: wireguard-apk
         path: /opt/wg/*