diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt
index 915bf23b..b4cd3e16 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt
@@ -69,10 +69,6 @@ data class ServerConfig(
fun getV2rayPointDomainAndPort(): String {
val address = getProxyOutbound()?.getServerAddress().orEmpty()
val port = getProxyOutbound()?.getServerPort()
- return if (Utils.isIpv6Address(address)) {
- String.format("[%s]:%s", address, port)
- } else {
- String.format("%s:%s", address, port)
- }
+ return Utils.getIpv6Address(address) + ":" + port
}
}
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt
index 2f38b7e2..11016d57 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt
@@ -21,6 +21,7 @@ import com.v2ray.ang.util.MmkvManager
import com.v2ray.ang.util.MmkvManager.ID_MAIN
import com.v2ray.ang.util.MmkvManager.KEY_SELECTED_SERVER
import com.v2ray.ang.util.Utils
+import com.v2ray.ang.util.Utils.getIpv6Address
class ServerActivity : BaseActivity() {
@@ -106,6 +107,9 @@ class ServerActivity : BaseActivity() {
private val et_reserved1: EditText? by lazy { findViewById(R.id.et_reserved1) }
private val et_reserved2: EditText? by lazy { findViewById(R.id.et_reserved2) }
private val et_reserved3: EditText? by lazy { findViewById(R.id.et_reserved3) }
+ private val et_local_v4_address: EditText? by lazy { findViewById(R.id.et_local_v4_address) }
+ private val et_local_v6_address: EditText? by lazy { findViewById(R.id.et_local_v6_address) }
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -210,6 +214,14 @@ class ServerActivity : BaseActivity() {
et_reserved2?.text = Utils.getEditable(outbound.settings?.reserved?.get(1).toString())
et_reserved3?.text = Utils.getEditable(outbound.settings?.reserved?.get(2).toString())
}
+ if (outbound.settings?.address == null) {
+ et_local_v4_address?.text = Utils.getEditable("172.16.0.2/32")
+ et_local_v6_address?.text = Utils.getEditable("2606:4700:110:8f81:d551:a0:532e:a2b3/128")
+ } else {
+ val list = outbound.settings?.address as List<*>
+ et_local_v4_address?.text = Utils.getEditable(list.get(0).toString())
+ et_local_v6_address?.text = Utils.getEditable(list.get(1).toString())
+ }
}
val securityEncryptions = if (config.configType == EConfigType.SHADOWSOCKS) shadowsocksSecuritys else securitys
val security = Utils.arrayFind(securityEncryptions, outbound.getSecurityEncryption().orEmpty())
@@ -295,6 +307,8 @@ class ServerActivity : BaseActivity() {
et_reserved1?.text = Utils.getEditable("0")
et_reserved2?.text = Utils.getEditable("0")
et_reserved3?.text = Utils.getEditable("0")
+ et_local_v4_address?.text = Utils.getEditable("172.16.0.2/32")
+ et_local_v6_address?.text = Utils.getEditable("2606:4700:110:8f81:d551:a0:532e:a2b3/128")
return true
}
@@ -398,7 +412,7 @@ class ServerActivity : BaseActivity() {
private fun savePeer(wireguard: V2rayConfig.OutboundBean.OutSettingsBean, port: Int) {
wireguard.secretKey = et_id.text.toString().trim()
wireguard.peers?.get(0)?.publicKey = et_public_key?.text.toString().trim()
- wireguard.peers?.get(0)?.endpoint = et_address.text.toString().trim() + ":" + port
+ wireguard.peers?.get(0)?.endpoint = getIpv6Address(et_address.text.toString().trim()) + ":" + port
val reserved1 = Utils.parseInt(et_reserved1?.text.toString())
val reserved2 = Utils.parseInt(et_reserved2?.text.toString())
val reserved3 = Utils.parseInt(et_reserved3?.text.toString())
@@ -407,6 +421,8 @@ class ServerActivity : BaseActivity() {
}else {
wireguard.reserved = null
}
+ wireguard.address = listOf(et_local_v4_address?.text.toString().trim(),
+ et_local_v6_address?.text.toString().trim())
}
private fun saveStreamSettings(streamSetting: V2rayConfig.OutboundBean.StreamSettingsBean) {
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt
index 07ea467b..b0f01eb0 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt
@@ -366,7 +366,7 @@ object Utils {
}
fun getIpv6Address(address: String): String {
- return if (isIpv6Address(address)) {
+ return if (isIpv6Address(address) && !address.contains('[') && !address.contains(']')) {
String.format("[%s]", address)
} else {
address
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt
index 2a80162c..b29efcac 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt
@@ -427,9 +427,13 @@ object V2rayConfigUtil {
}
if (protocol.equals(EConfigType.WIREGUARD.name, true)) {
- val localTunAddr = mutableListOf("172.16.0.2/32")
- if (settingsStorage?.decodeBool(AppConfig.PREF_PREFER_IPV6) == true) {
- localTunAddr.add("2606:4700:110:8f81:d551:a0:532e:a2b3/128")
+ var localTunAddr = if (outbound.settings?.address == null) {
+ listOf("172.16.0.2/32", "2606:4700:110:8f81:d551:a0:532e:a2b3/128")
+ } else {
+ outbound.settings?.address as List<*>
+ }
+ if (settingsStorage?.decodeBool(AppConfig.PREF_PREFER_IPV6) != true) {
+ localTunAddr = listOf(localTunAddr.first())
}
outbound.settings?.address = localTunAddr
}
diff --git a/V2rayNG/app/src/main/res/layout/activity_server_wireguard.xml b/V2rayNG/app/src/main/res/layout/activity_server_wireguard.xml
index 284a8b23..9b5bdf26 100644
--- a/V2rayNG/app/src/main/res/layout/activity_server_wireguard.xml
+++ b/V2rayNG/app/src/main/res/layout/activity_server_wireguard.xml
@@ -151,6 +151,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ShortId
SpiderX
Reserved (اختياري)
+ العنوان المحلي IPv4(اختياري)
+ العنوان المحلي IPv6(اختياري, يستخدم فقط عندما تفضل IPv6)
نجاح
فشل
لا يوجد شيء
diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml
index 96b2cbe2..37a53b49 100644
--- a/V2rayNG/app/src/main/res/values-fa/strings.xml
+++ b/V2rayNG/app/src/main/res/values-fa/strings.xml
@@ -61,6 +61,8 @@
رمزگذاری
جریان
Reserved (اختیاری)
+ آدرس محلی IPv4(اختیاری)
+ آدرس محلی IPv6(اختیاری, فقط زمانی استفاده می شود که IPv6 را ترجیح می دهد)
موفقیت
شکست
چیزی نیست
diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml
index e2c4e548..59befe74 100644
--- a/V2rayNG/app/src/main/res/values-ru/strings.xml
+++ b/V2rayNG/app/src/main/res/values-ru/strings.xml
@@ -66,6 +66,8 @@
ShortId
SpiderX
Reserved (необязательно)
+ локальный адрес IPv4(необязательно)
+ локальный адрес IPv6(необязательно, используется только в том случае если предпочитаете IPv6)
Успешно
Ошибка
Ничего нет
diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml
index fab44ac3..f3f6ca1c 100644
--- a/V2rayNG/app/src/main/res/values-vi/strings.xml
+++ b/V2rayNG/app/src/main/res/values-vi/strings.xml
@@ -60,6 +60,8 @@
Mã hoá
Kiểm soát lưu lượng
Reserved (Bổ sung)
+ địa chỉ cục bộ IPv4(Bổ sung)
+ địa chỉ cục bộ IPv6(Bổ sung, chỉ được sử dụng khi thích IPv6)
Thành công!
Đã xảy ra lỗi, vui lòng thử lại!
Không có gì ở đây
diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
index 483fbe1f..e1113fc1 100644
--- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
+++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
@@ -60,6 +60,8 @@
加密方式(encryption)
流控(flow)
Reserved(可选)
+ 本地 IPv4 地址(可选)
+ 本地 IPv6 地址(可选, 仅 IPv6 优先时使用)
成功
失败
没有数据
diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
index de2a4862..13f69607 100644
--- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
+++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
@@ -60,6 +60,8 @@
加密 (encryption)
流程 (flow)
Reserved (可選)
+ 本機 IPv4 位址(可選)
+ 本機 IPv6 位址(可選, 僅偏好 IPv6 時使用)
成功
失敗
無資料
diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml
index 532d9fc8..1e217f6e 100644
--- a/V2rayNG/app/src/main/res/values/strings.xml
+++ b/V2rayNG/app/src/main/res/values/strings.xml
@@ -67,6 +67,8 @@
SpiderX
SecretKey
Reserved(Optional)
+ local address IPv4(Optional)
+ local address IPv6(Optional, only used when prefer IPv6)
Success
Failure
There is nothing