sterepando commited on
Commit
7053ac2
·
verified ·
1 Parent(s): 6e9b7b9

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +46 -19
Dockerfile CHANGED
@@ -1,6 +1,6 @@
1
  FROM rust:slim-bullseye
2
 
3
- # 1. Установка системных зависимостей (включая python3)
4
  RUN apt-get update && apt-get install -y \
5
  curl \
6
  unzip \
@@ -29,11 +29,11 @@ RUN cargo install cargo-ndk
29
  WORKDIR /app
30
  RUN cargo init --lib --name vless_core
31
 
32
- # 5. Создание Cargo.toml
33
  RUN cat <<EOF > Cargo.toml
34
  [package]
35
  name = "vless_core"
36
- version = "0.1.0"
37
  edition = "2021"
38
 
39
  [lib]
@@ -48,18 +48,20 @@ android_logger = "0.13"
48
  lazy_static = "1.4"
49
  serde = { version = "1.0", features = ["derive"] }
50
  serde_json = "1.0"
 
51
  EOF
52
 
53
- # 6. Создание src/lib.rs
54
  RUN cat <<EOF > src/lib.rs
55
  use std::ffi::CStr;
56
  use std::os::raw::{c_char, c_int};
57
  use std::sync::{Arc, Mutex};
58
- use log::{info, error, LevelFilter};
59
  use android_logger::Config;
60
  use tokio::runtime::Runtime;
61
  use tokio::task::JoinHandle;
62
  use serde::Deserialize;
 
63
 
64
  lazy_static::lazy_static! {
65
  static ref RUNTIME: Runtime = Runtime::new().unwrap();
@@ -68,23 +70,45 @@ lazy_static::lazy_static! {
68
 
69
  #[no_mangle]
70
  pub extern "C" fn init_logger() {
71
- android_logger::init_once(Config::default().with_max_level(LevelFilter::Info).with_tag("MandreVlessNative"));
72
- info!("Native Logger Initialized");
73
  }
74
 
75
- #[derive(Deserialize)]
76
- struct VlessConfig {
 
77
  uuid: String,
78
  address: String,
79
  port: u16,
 
 
 
 
 
 
 
 
80
  }
81
 
82
- async fn vless_worker(config: VlessConfig) {
83
- info!("Starting VLESS Core connecting to {}:{}", config.address, config.port);
 
 
 
 
 
 
 
 
84
  loop {
85
- // Здесь будет логика подключения
86
- info!("VLESS Keepalive: Ping to {}", config.address);
87
- tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;
 
 
 
 
 
88
  }
89
  }
90
 
@@ -96,21 +120,24 @@ pub extern "C" fn start_vless(config_json: *const c_char) -> c_int {
96
  Err(_) => return -2,
97
  };
98
 
99
- let config: VlessConfig = match serde_json::from_str(str_slice) {
 
100
  Ok(c) => c,
101
  Err(e) => {
102
- error!("Config parse error: {}", e);
103
  return -3;
104
  }
105
  };
106
 
107
  let mut handle = VPN_HANDLE.lock().unwrap();
108
  if handle.is_some() {
109
- return 1;
 
 
 
110
  }
111
 
112
  *handle = Some(RUNTIME.spawn(vless_worker(config)));
113
- info!("VLESS Service Started");
114
  return 0;
115
  }
116
 
@@ -133,6 +160,6 @@ RUN cargo ndk -t armeabi-v7a -t arm64-v8a -t x86_64 -o ./jniLibs build --release
133
  WORKDIR /app
134
  RUN zip -r vless_libs.zip jniLibs
135
 
136
- # 9. Сервер раздачи (Используем полный путь к python3)
137
  EXPOSE 7860
138
  CMD ["/usr/bin/python3", "-m", "http.server", "7860"]
 
1
  FROM rust:slim-bullseye
2
 
3
+ # 1. Установка системных зависимостей
4
  RUN apt-get update && apt-get install -y \
5
  curl \
6
  unzip \
 
29
  WORKDIR /app
30
  RUN cargo init --lib --name vless_core
31
 
32
+ # 5. Cargo.toml с поддержкой JSON и Async
33
  RUN cat <<EOF > Cargo.toml
34
  [package]
35
  name = "vless_core"
36
+ version = "0.2.0"
37
  edition = "2021"
38
 
39
  [lib]
 
48
  lazy_static = "1.4"
49
  serde = { version = "1.0", features = ["derive"] }
50
  serde_json = "1.0"
51
+ # В реальном ядре здесь были бы зависимости TLS (rustls) и VLESS-протокола
52
  EOF
53
 
54
+ # 6. Исходный код (src/lib.rs)
55
  RUN cat <<EOF > src/lib.rs
56
  use std::ffi::CStr;
57
  use std::os::raw::{c_char, c_int};
58
  use std::sync::{Arc, Mutex};
59
+ use log::{info, error, warn, LevelFilter};
60
  use android_logger::Config;
61
  use tokio::runtime::Runtime;
62
  use tokio::task::JoinHandle;
63
  use serde::Deserialize;
64
+ use tokio::net::TcpStream;
65
 
66
  lazy_static::lazy_static! {
67
  static ref RUNTIME: Runtime = Runtime::new().unwrap();
 
70
 
71
  #[no_mangle]
72
  pub extern "C" fn init_logger() {
73
+ android_logger::init_once(Config::default().with_max_level(LevelFilter::Info).with_tag("MandreVless"));
74
+ info!("Mandre VLESS Core v2.0 Initialized");
75
  }
76
 
77
+ // Полная структура конфигурации VLESS + Reality
78
+ #[derive(Deserialize, Debug)]
79
+ struct VlessFullConfig {
80
  uuid: String,
81
  address: String,
82
  port: u16,
83
+ flow: Option<String>,
84
+ security: String, // reality, tls, none
85
+ sni: Option<String>,
86
+ fp: Option<String>, // fingerprint (chrome, ios...)
87
+ pbk: Option<String>, // public key for reality
88
+ sid: Option<String>, // short id
89
+ spx: Option<String>, // reality path
90
+ name: Option<String>,
91
  }
92
 
93
+ async fn vless_worker(cfg: VlessFullConfig) {
94
+ info!(" CORE START: {} ({}:{})", cfg.name.as_deref().unwrap_or("Unknown"), cfg.address, cfg.port);
95
+
96
+ if cfg.security == "reality" {
97
+ info!("🔒 SECURITY: REALITY | SNI: {:?} | FP: {:?}", cfg.sni, cfg.fp);
98
+ info!("🔑 REALITY KEYS: PBK={:?} SID={:?}", cfg.pbk, cfg.sid);
99
+ } else {
100
+ info!("🔓 SECURITY: {}", cfg.security);
101
+ }
102
+
103
  loop {
104
+ // Эмуляция подключения к сокету
105
+ match TcpStream::connect((cfg.address.as_str(), cfg.port)).await {
106
+ Ok(_) => info!("✅ TCP Handshake OK: {}:{}", cfg.address, cfg.port),
107
+ Err(e) => warn!("❌ Connect Failed: {}", e),
108
+ }
109
+
110
+ // В полноценном VPN здесь был бы tun2socks цикл
111
+ tokio::time::sleep(tokio::time::Duration::from_secs(10)).await;
112
  }
113
  }
114
 
 
120
  Err(_) => return -2,
121
  };
122
 
123
+ // Парсим полный конфиг
124
+ let config: VlessFullConfig = match serde_json::from_str(str_slice) {
125
  Ok(c) => c,
126
  Err(e) => {
127
+ error!("JSON Parse Error: {}", e);
128
  return -3;
129
  }
130
  };
131
 
132
  let mut handle = VPN_HANDLE.lock().unwrap();
133
  if handle.is_some() {
134
+ // Если уже запущен, перезапускаем (убиваем старый)
135
+ if let Some(h) = handle.take() {
136
+ h.abort();
137
+ }
138
  }
139
 
140
  *handle = Some(RUNTIME.spawn(vless_worker(config)));
 
141
  return 0;
142
  }
143
 
 
160
  WORKDIR /app
161
  RUN zip -r vless_libs.zip jniLibs
162
 
163
+ # 9. Сервер
164
  EXPOSE 7860
165
  CMD ["/usr/bin/python3", "-m", "http.server", "7860"]