mirror of
https://github.com/aramperes/onetun.git
synced 2025-09-09 17:18:31 -04:00
Compare commits
No commits in common. "master" and "v0.3.8" have entirely different histories.
11 changed files with 383 additions and 358 deletions
10
.github/dependabot.yml
vendored
10
.github/dependabot.yml
vendored
|
@ -1,10 +0,0 @@
|
||||||
# Please see the documentation for all configuration options:
|
|
||||||
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
|
||||||
|
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "cargo"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
rebase-strategy: "disabled"
|
|
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
|
@ -10,7 +10,7 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
rust:
|
rust:
|
||||||
- stable
|
- stable
|
||||||
- 1.80.0
|
- 1.78.0
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
@ -39,7 +39,7 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
rust:
|
rust:
|
||||||
- stable
|
- stable
|
||||||
- 1.80.0
|
- 1.78.0
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
27
.github/workflows/release.yml
vendored
27
.github/workflows/release.yml
vendored
|
@ -75,28 +75,20 @@ jobs:
|
||||||
RUST_BACKTRACE: 1
|
RUST_BACKTRACE: 1
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
build: [ linux-amd64, linux-aarch64, macos-aarch64, windows ]
|
build: [ linux-amd64, macos-intel, windows ]
|
||||||
include:
|
include:
|
||||||
- build: linux-amd64
|
- build: linux-amd64
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
rust: stable
|
rust: stable
|
||||||
target: x86_64-unknown-linux-musl
|
target: x86_64-unknown-linux-musl
|
||||||
cross: true
|
- build: macos-intel
|
||||||
- build: linux-aarch64
|
|
||||||
os: ubuntu-latest
|
|
||||||
rust: stable
|
|
||||||
target: aarch64-unknown-linux-musl
|
|
||||||
cross: true
|
|
||||||
- build: macos-aarch64
|
|
||||||
os: macos-latest
|
os: macos-latest
|
||||||
rust: stable
|
rust: stable
|
||||||
target: aarch64-apple-darwin
|
target: x86_64-apple-darwin
|
||||||
cross: false
|
|
||||||
- build: windows
|
- build: windows
|
||||||
os: windows-2019
|
os: windows-2019
|
||||||
rust: stable
|
rust: stable
|
||||||
target: x86_64-pc-windows-msvc
|
target: x86_64-pc-windows-msvc
|
||||||
cross: false
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
@ -134,24 +126,17 @@ jobs:
|
||||||
echo "release upload url: $release_upload_url"
|
echo "release upload url: $release_upload_url"
|
||||||
|
|
||||||
- name: Build onetun binary
|
- name: Build onetun binary
|
||||||
shell: bash
|
run: cargo build --release
|
||||||
run: |
|
|
||||||
if [ "${{ matrix.cross }}" = "true" ]; then
|
|
||||||
cargo install cross
|
|
||||||
cross build --release --target ${{ matrix.target }}
|
|
||||||
else
|
|
||||||
cargo build --release --target ${{ matrix.target }}
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Prepare onetun binary
|
- name: Prepare onetun binary
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
mkdir -p ci/assets
|
mkdir -p ci/assets
|
||||||
if [ "${{ matrix.build }}" = "windows" ]; then
|
if [ "${{ matrix.build }}" = "windows" ]; then
|
||||||
cp "target/${{ matrix.target }}/release/onetun.exe" "ci/assets/onetun.exe"
|
cp "target/release/onetun.exe" "ci/assets/onetun.exe"
|
||||||
echo "ASSET=onetun.exe" >> $GITHUB_ENV
|
echo "ASSET=onetun.exe" >> $GITHUB_ENV
|
||||||
else
|
else
|
||||||
cp "target/${{ matrix.target }}/release/onetun" "ci/assets/onetun-${{ matrix.build }}"
|
cp "target/release/onetun" "ci/assets/onetun-${{ matrix.build }}"
|
||||||
echo "ASSET=onetun-${{ matrix.build }}" >> $GITHUB_ENV
|
echo "ASSET=onetun-${{ matrix.build }}" >> $GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
664
Cargo.lock
generated
664
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "onetun"
|
name = "onetun"
|
||||||
version = "0.3.10"
|
version = "0.3.8"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
description = "A cross-platform, user-space WireGuard port-forwarder that requires no system network configurations."
|
description = "A cross-platform, user-space WireGuard port-forwarder that requires no system network configurations."
|
||||||
|
@ -19,8 +19,8 @@ futures = "0.3"
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
nom = "7"
|
nom = "7"
|
||||||
async-trait = "0.1"
|
async-trait = "0.1"
|
||||||
priority-queue = "2.1"
|
priority-queue = "1.3"
|
||||||
smoltcp = { version = "0.12", default-features = false, features = [
|
smoltcp = { version = "0.11", default-features = false, features = [
|
||||||
"std",
|
"std",
|
||||||
"log",
|
"log",
|
||||||
"medium-ip",
|
"medium-ip",
|
||||||
|
@ -37,7 +37,7 @@ tracing = { version = "0.1", default-features = false, features = ["log"] }
|
||||||
|
|
||||||
# bin-only dependencies
|
# bin-only dependencies
|
||||||
clap = { version = "4.4.11", default-features = false, features = ["suggestions", "std", "env", "help", "wrap_help"], optional = true }
|
clap = { version = "4.4.11", default-features = false, features = ["suggestions", "std", "env", "help", "wrap_help"], optional = true }
|
||||||
pretty_env_logger = { version = "0.5", optional = true }
|
pretty_env_logger = { version = "0.4", optional = true }
|
||||||
async-recursion = "1.0"
|
async-recursion = "1.0"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2025 Aram Peres
|
Copyright (c) 2023 Aram Peres
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -21,13 +21,13 @@ For example,
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
onetun is available to install from [crates.io](https://crates.io/crates/onetun) with Rust ≥1.80.0:
|
onetun is available to install from [crates.io](https://crates.io/crates/onetun) with Rust ≥1.78.0:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
cargo install onetun
|
cargo install onetun
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also download the binary for Windows, macOS (Apple Silicon), and Linux (amd64, arm64) from
|
You can also download the binary for Windows, macOS (Intel), and Linux (amd64) from
|
||||||
the [Releases](https://github.com/aramperes/onetun/releases) page.
|
the [Releases](https://github.com/aramperes/onetun/releases) page.
|
||||||
|
|
||||||
You can also run onetun using [Docker](https://hub.docker.com/r/aramperes/onetun):
|
You can also run onetun using [Docker](https://hub.docker.com/r/aramperes/onetun):
|
||||||
|
@ -37,7 +37,7 @@ docker run --rm --name onetun --user 1000 -p 8080:8080 aramperes/onetun \
|
||||||
0.0.0.0:8080:192.168.4.2:8080 [...options...]
|
0.0.0.0:8080:192.168.4.2:8080 [...options...]
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also build onetun locally, using Rust ≥1.80.0:
|
You can also build onetun locally, using Rust ≥1.78.0:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
git clone https://github.com/aramperes/onetun && cd onetun
|
git clone https://github.com/aramperes/onetun && cd onetun
|
||||||
|
@ -319,4 +319,4 @@ Please consider opening a GitHub issue if you are unsure if your contribution is
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
MIT License. See `LICENSE` for details. Copyright © 2025 Aram Peres.
|
MIT License. See `LICENSE` for details. Copyright © 2023 Aram Peres.
|
||||||
|
|
|
@ -109,11 +109,11 @@ pub struct RxToken {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl smoltcp::phy::RxToken for RxToken {
|
impl smoltcp::phy::RxToken for RxToken {
|
||||||
fn consume<R, F>(self, f: F) -> R
|
fn consume<R, F>(mut self, f: F) -> R
|
||||||
where
|
where
|
||||||
F: FnOnce(&[u8]) -> R,
|
F: FnOnce(&mut [u8]) -> R,
|
||||||
{
|
{
|
||||||
f(&self.buffer)
|
f(&mut self.buffer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ use crate::Bus;
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use smoltcp::iface::PollResult;
|
|
||||||
use smoltcp::{
|
use smoltcp::{
|
||||||
iface::{Config, Interface, SocketHandle, SocketSet},
|
iface::{Config, Interface, SocketHandle, SocketSet},
|
||||||
socket::tcp,
|
socket::tcp,
|
||||||
|
@ -142,7 +141,7 @@ impl VirtualInterfacePoll for TcpVirtualInterface {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if iface.poll(loop_start, &mut device, &mut self.sockets) == PollResult::SocketStateChanged {
|
if iface.poll(loop_start, &mut device, &mut self.sockets) {
|
||||||
log::trace!("TCP virtual interface polled some packets to be processed");
|
log::trace!("TCP virtual interface polled some packets to be processed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ use crate::{Bus, PortProtocol};
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use smoltcp::iface::PollResult;
|
|
||||||
use smoltcp::{
|
use smoltcp::{
|
||||||
iface::{Config, Interface, SocketHandle, SocketSet},
|
iface::{Config, Interface, SocketHandle, SocketSet},
|
||||||
socket::udp::{self, UdpMetadata},
|
socket::udp::{self, UdpMetadata},
|
||||||
|
@ -141,7 +140,7 @@ impl VirtualInterfacePoll for UdpVirtualInterface {
|
||||||
} => {
|
} => {
|
||||||
let loop_start = smoltcp::time::Instant::now();
|
let loop_start = smoltcp::time::Instant::now();
|
||||||
|
|
||||||
if iface.poll(loop_start, &mut device, &mut self.sockets) == PollResult::SocketStateChanged {
|
if iface.poll(loop_start, &mut device, &mut self.sockets) {
|
||||||
log::trace!("UDP virtual interface polled some packets to be processed");
|
log::trace!("UDP virtual interface polled some packets to be processed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use std::net::{IpAddr, SocketAddr};
|
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use crate::Bus;
|
use crate::Bus;
|
||||||
|
@ -253,7 +253,7 @@ impl WireGuardTunnel {
|
||||||
Ok(IpVersion::Ipv4) => Ipv4Packet::new_checked(&packet)
|
Ok(IpVersion::Ipv4) => Ipv4Packet::new_checked(&packet)
|
||||||
.ok()
|
.ok()
|
||||||
// Only care if the packet is destined for this tunnel
|
// Only care if the packet is destined for this tunnel
|
||||||
.filter(|packet| packet.dst_addr() == self.source_peer_ip)
|
.filter(|packet| Ipv4Addr::from(packet.dst_addr()) == self.source_peer_ip)
|
||||||
.and_then(|packet| match packet.next_header() {
|
.and_then(|packet| match packet.next_header() {
|
||||||
IpProtocol::Tcp => Some(PortProtocol::Tcp),
|
IpProtocol::Tcp => Some(PortProtocol::Tcp),
|
||||||
IpProtocol::Udp => Some(PortProtocol::Udp),
|
IpProtocol::Udp => Some(PortProtocol::Udp),
|
||||||
|
@ -263,7 +263,7 @@ impl WireGuardTunnel {
|
||||||
Ok(IpVersion::Ipv6) => Ipv6Packet::new_checked(&packet)
|
Ok(IpVersion::Ipv6) => Ipv6Packet::new_checked(&packet)
|
||||||
.ok()
|
.ok()
|
||||||
// Only care if the packet is destined for this tunnel
|
// Only care if the packet is destined for this tunnel
|
||||||
.filter(|packet| packet.dst_addr() == self.source_peer_ip)
|
.filter(|packet| Ipv6Addr::from(packet.dst_addr()) == self.source_peer_ip)
|
||||||
.and_then(|packet| match packet.next_header() {
|
.and_then(|packet| match packet.next_header() {
|
||||||
IpProtocol::Tcp => Some(PortProtocol::Tcp),
|
IpProtocol::Tcp => Some(PortProtocol::Tcp),
|
||||||
IpProtocol::Udp => Some(PortProtocol::Udp),
|
IpProtocol::Udp => Some(PortProtocol::Udp),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue