makefile and service

This commit is contained in:
2026-03-08 14:39:12 +07:00
parent 8bad1b0162
commit 676683d29c
6 changed files with 80 additions and 20 deletions
+48
View File
@@ -0,0 +1,48 @@
# Настройки
SERVER_IP = 62.60.244.156
REMOTE_USER = root
REMOTE_PATH = /root/netr-core
SERVICE_NAME = netrunner-server
.PHONY: build-client build-server deploy-server logs
# Сборка
build-client:
cargo build --bin netrunner-client --release
build-server:
cargo build --bin netrunner-server --release
setup-server:
@echo "--- Обновление системы и установка зависимостей ---"
ssh $(REMOTE_USER)@$(SERVER_IP) "\
apt-get update && \
apt-get upgrade -y && \
apt-get install -y build-essential libssl-dev pkg-config && \
mkdir -p $(REMOTE_PATH)"
# Деплой
deploy-server: build-server
@echo "--- Останавливаем старый сервер ---"
ssh $(REMOTE_USER)@$(SERVER_IP) "systemctl stop $(SERVICE_NAME)" || true
@echo "--- Копируем бинарник ---"
ssh $(REMOTE_USER)@$(SERVER_IP) "mkdir -p $(REMOTE_PATH)"
scp target/release/netrunner-server $(REMOTE_USER)@$(SERVER_IP):$(REMOTE_PATH)/
@echo "--- Копируем файл сервиса ---"
scp server/netrunner-server.service $(REMOTE_USER)@$(SERVER_IP):/etc/systemd/system/$(SERVICE_NAME).service
@echo "--- Запускаем сервис ---"
ssh $(REMOTE_USER)@$(SERVER_IP) "\
systemctl daemon-reload && \
systemctl enable $(SERVICE_NAME) && \
systemctl start $(SERVICE_NAME)"
# Логи
logs:
ssh $(REMOTE_USER)@$(SERVER_IP) "journalctl -u $(SERVICE_NAME) -f"
# Вход на сервер
ssh:
ssh $(REMOTE_USER)@$(SERVER_IP)
-17
View File
@@ -1,17 +0,0 @@
use netrunner_common::{
logger_init,
proxy::{connection::connection::ConnectionRole, network::Network},
};
fn main() {
logger_init();
//todo normal address
let net = Network::new(8080, ConnectionRole::Client, Some("0.0.0.0:4443".into()));
// Создаем движок (Runtime)
let rt = tokio::runtime::Runtime::new().expect("Failed to create Tokio runtime");
// "Блокируем" основной поток, пока работает асинхронный код
rt.block_on(async {
net.run().await;
});
}
+11 -1
View File
@@ -1,6 +1,7 @@
use lru::LruCache; use lru::LruCache;
use std::net::Ipv4Addr; use std::net::Ipv4Addr;
use std::num::NonZeroUsize; use std::num::NonZeroUsize;
use tracing::{debug, info};
pub struct FakeIpStore { pub struct FakeIpStore {
cache: LruCache<String, Ipv4Addr>, cache: LruCache<String, Ipv4Addr>,
@@ -12,6 +13,7 @@ const START_IP: u32 = 0x64400001; // 100.64.0.1 (IP for Service Networks/Shared
impl FakeIpStore { impl FakeIpStore {
pub fn new() -> Self { pub fn new() -> Self {
info!("Initializing FakeIpStore starting at 100.64.0.1");
Self { Self {
cache: LruCache::new(NonZeroUsize::new(2000).unwrap()), cache: LruCache::new(NonZeroUsize::new(2000).unwrap()),
rev_cache: LruCache::new(NonZeroUsize::new(2000).unwrap()), rev_cache: LruCache::new(NonZeroUsize::new(2000).unwrap()),
@@ -21,16 +23,24 @@ impl FakeIpStore {
pub fn get_or_assign(&mut self, host: &str) -> Ipv4Addr { pub fn get_or_assign(&mut self, host: &str) -> Ipv4Addr {
if let Some(&ip) = self.cache.get(host) { if let Some(&ip) = self.cache.get(host) {
debug!(host = %host, ip = %ip, "Cache hit: IP already assigned");
return ip; return ip;
} }
let ip = Ipv4Addr::from(self.next_ip); let ip = Ipv4Addr::from(self.next_ip);
self.next_ip += 1; self.next_ip += 1;
self.cache.put(host.to_string(), ip); self.cache.put(host.to_string(), ip);
self.rev_cache.put(ip, host.to_string()); self.rev_cache.put(ip, host.to_string());
info!(host = %host, ip = %ip, "Assigned new fake IP");
ip ip
} }
pub fn lookup_by_ip(&self, ip: &Ipv4Addr) -> Option<String> { pub fn lookup_by_ip(&self, ip: &Ipv4Addr) -> Option<String> {
self.rev_cache.peek(ip).cloned() if let Some(host) = self.rev_cache.peek(ip) {
debug!(ip = %ip, host = %host, "Reverse lookup successful");
Some(host.clone())
} else {
debug!(ip = %ip, "Reverse lookup miss");
None
}
} }
} }
+1 -1
View File
@@ -31,7 +31,7 @@ async fn main() {
let config = Config::new(smoltcp::wire::HardwareAddress::Ip); let config = Config::new(smoltcp::wire::HardwareAddress::Ip);
let mut caps = DeviceCapabilities::default(); let mut caps = DeviceCapabilities::default();
let remote_address: String = "172.18.151.121:4443".into(); let remote_address: String = "62.60.244.156:443".into();
caps.max_transmission_unit = 1500; caps.max_transmission_unit = 1500;
caps.medium = smoltcp::phy::Medium::Ip; caps.medium = smoltcp::phy::Medium::Ip;
-1
View File
@@ -64,7 +64,6 @@ impl Device for VirtTunDevice {
fn receive(&mut self, _timestamp: Instant) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> { fn receive(&mut self, _timestamp: Instant) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> {
if let Ok(buffer) = self.in_buf.try_recv() { if let Ok(buffer) = self.in_buf.try_recv() {
trace!("--- TUN RX: {} bytes ---", buffer.len()); // Посмотри, что именно прилетает
let rx = Self::RxToken { let rx = Self::RxToken {
buffer, buffer,
phantom_device: PhantomData, phantom_device: PhantomData,
+20
View File
@@ -0,0 +1,20 @@
[Unit]
Description=Netrunner Remote Proxy
After=network.target
[Service]
# Запускаем от root, так как файл лежит в /root/
User=root
# Путь к папке
WorkingDirectory=/root/netr-core
# Точный путь к файлу
ExecStart=/root/netr-core/netrunner-server --host=0.0.0.0 --port=443
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target