refine (#83)
@@ -31,7 +31,8 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # 如果未启用 lastUpdated,则不需要
|
fetch-depth: 1 # 如果未启用 lastUpdated,则不需要
|
||||||
|
submodules: recursive
|
||||||
- uses: pnpm/action-setup@v3 # 如果使用 pnpm,请取消注释
|
- uses: pnpm/action-setup@v3 # 如果使用 pnpm,请取消注释
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 9
|
||||||
@@ -45,7 +46,7 @@ jobs:
|
|||||||
- name: Setup Pages
|
- name: Setup Pages
|
||||||
uses: actions/configure-pages@v4
|
uses: actions/configure-pages@v4
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install # 或 pnpm install / yarn install / bun install
|
run: pnpm -r install # 或 pnpm install / yarn install / bun install
|
||||||
- name: Build with VitePress
|
- name: Build with VitePress
|
||||||
run: pnpm run docs:build # 或 pnpm docs:build / yarn docs:build / bun run docs:build
|
run: pnpm run docs:build # 或 pnpm docs:build / yarn docs:build / bun run docs:build
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule ".vitepress/third_party/lumen"]
|
||||||
|
path = .vitepress/third_party/lumen
|
||||||
|
url = https://github.com/KKRainbow/lumen.git
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import fs from 'node:fs'
|
||||||
import { defineConfig } from 'vitepress'
|
import { defineConfig } from 'vitepress'
|
||||||
|
|
||||||
export const cn = defineConfig({
|
export const cn = defineConfig({
|
||||||
@@ -9,7 +10,8 @@ export const cn = defineConfig({
|
|||||||
{
|
{
|
||||||
text: '开始',
|
text: '开始',
|
||||||
items: [
|
items: [
|
||||||
{ text: '简介', link: '/guide/introduction' },
|
{ text: '功能简介', link: '/guide/introduction' },
|
||||||
|
{ text: '下载', link: '/guide/download' },
|
||||||
{ text: '安装', link: '/guide/installation' },
|
{ text: '安装', link: '/guide/installation' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -17,18 +19,23 @@ export const cn = defineConfig({
|
|||||||
text: '命令行工具组网',
|
text: '命令行工具组网',
|
||||||
link: '/guide/networking',
|
link: '/guide/networking',
|
||||||
items: [
|
items: [
|
||||||
{ text: '双节点', link: '/guide/network/two-node-networking' },
|
{ text: '快速组网', link: '/guide/network/fast-networking' },
|
||||||
{ text: '多节点', link: '/guide/network/multi-node-networking' },
|
{ text: '去中心组网', link: '/guide/network/decentralized-networking' },
|
||||||
{ text: '子网代理(点对网)', link: '/guide/network/point-to-networking' },
|
{ text: '使用 Web 控制台组网', link: '/guide/network/web-console' },
|
||||||
{ text: '网对网', link: '/guide/network/network-to-network' },
|
|
||||||
{ text: '无公网 IP', link: '/guide/network/networking-without-public-ip' },
|
|
||||||
{ text: '使用 WireGuard 客户端接入', link: '/guide/network/use-easytier-with-wireguard-client' },
|
{ text: '使用 WireGuard 客户端接入', link: '/guide/network/use-easytier-with-wireguard-client' },
|
||||||
{ text: 'SOCKS5', link: '/guide/network/socks5' },
|
{ text: '子网代理(点对网)', link: '/guide/network/point-to-networking' },
|
||||||
{ text: '无 TUN 模式(免 Root 权限)', link: '/guide/network/no-root' },
|
{ text: '高级功能', collapsed: true, items: [
|
||||||
{ text: '自建公共服务器', link: '/guide/network/host-public-server' },
|
{ text: '网对网', link: '/guide/network/network-to-network' },
|
||||||
{ text: '安装为 Windows 服务(开机自启)', link: '/guide/network/install-as-a-windows-service' },
|
{ text: '无 TUN 模式(免 Root 权限)', link: '/guide/network/no-root' },
|
||||||
{ text: '安装为 Linux systemd 服务', link: '/guide/network/install-as-a-systemd-service' },
|
{ text: 'SOCKS5', link: '/guide/network/socks5' },
|
||||||
{ text: '安装为 macOS 服务', link: '/guide/network/install-as-a-macos-service' },
|
{ text: '搭建共享节点', link: '/guide/network/host-public-server' },
|
||||||
|
{ text: '改善 P2P', link: '/guide/network/p2p-optimize' },
|
||||||
|
] },
|
||||||
|
{ text: '开机自启(注册服务)', collapsed: true, items: [
|
||||||
|
{ text: '安装为 Windows 服务', link: '/guide/network/install-as-a-windows-service' },
|
||||||
|
{ text: '安装为 Linux systemd 服务', link: '/guide/network/install-as-a-systemd-service' },
|
||||||
|
{ text: '安装为 macOS 服务', link: '/guide/network/install-as-a-macos-service' },
|
||||||
|
] },
|
||||||
{ text: '其他配置', link: '/guide/network/configurations' },
|
{ text: '其他配置', link: '/guide/network/configurations' },
|
||||||
{ text: '配置文件', link: '/guide/network/config-file' },
|
{ text: '配置文件', link: '/guide/network/config-file' },
|
||||||
],
|
],
|
||||||
@@ -56,14 +63,25 @@ export const cn = defineConfig({
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
nav: [
|
nav: [
|
||||||
{ text: '进入 Web 控制台', link: 'https://easytier.cn/web' },
|
{
|
||||||
|
text: '<iconify-icon icon="fa6-solid:gears" style="margin-right:0.25rem;color:#3498db;"></iconify-icon>Web 控制台',
|
||||||
|
link: 'https://easytier.cn/web',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '<iconify-icon icon="fa6-solid:bug" style="margin-right:0.25rem;color:#FF4500;" alt="bug"></iconify-icon>提交反馈',
|
||||||
|
link: 'https://github.com/EasyTier/EasyTier/issues',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '<iconify-icon icon="fa6-solid:clipboard-list" style="margin-right:0.25rem;color:#FF6347;" alt="clipboard"></iconify-icon>变更日志',
|
||||||
|
link: 'https://github.com/EasyTier/EasyTier/releases',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
footer: {
|
footer: {
|
||||||
message: '基于 Apache License 2.0 许可发布',
|
message: '基于 Apache License 2.0 许可发布',
|
||||||
copyright: '版权所有 © 2024-present EasyTier | '
|
copyright: '版权所有 © 2024-present EasyTier | '
|
||||||
+ '<a href="https://beian.miit.gov.cn/">'
|
+ '<a href="https://beian.miit.gov.cn/">'
|
||||||
+ '<img src="https://img.alicdn.com/tfs/TB1..50QpXXXXX7XpXXXXXXXXXX-40-40.png" alt="ICP 备案" style="width: 16px; height: 16px; display: inline-block; margin-bottom: -4px;">'
|
+ '<img src="https://img.alicdn.com/tfs/TB1..50QpXXXXX7XpXXXXXXXXXX-40-40.png" alt="ICP 备案" style="width: 16px; height: 16px; display: inline-block; margin-bottom: -4px;">'
|
||||||
+ '浙ICP备2024137671号-1</a>',
|
+ '浙ICP备2024137671号-1</a>',
|
||||||
},
|
},
|
||||||
editLink: {
|
editLink: {
|
||||||
pattern: 'https://github.com/EasyTier/easytier.github.io/edit/main/:path',
|
pattern: 'https://github.com/EasyTier/easytier.github.io/edit/main/:path',
|
||||||
|
|||||||
@@ -1,40 +1,60 @@
|
|||||||
|
import fs from 'node:fs'
|
||||||
import { defineConfig } from 'vitepress'
|
import { defineConfig } from 'vitepress'
|
||||||
|
|
||||||
export const en = defineConfig({
|
export const en = defineConfig({
|
||||||
lang: 'en',
|
lang: 'en',
|
||||||
description: 'A simple, safe and decentralized SD-WAN networking solution implemented with the Rust language and Tokio framework',
|
description: 'A simple, secure, decentralized SD-WAN solution for intranet penetration, implemented using Rust and the Tokio framework',
|
||||||
|
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
sidebar: [
|
sidebar: [
|
||||||
{
|
{
|
||||||
text: 'Getting started',
|
text: 'Getting Started',
|
||||||
items: [
|
items: [
|
||||||
{ text: 'Introduction', link: '/en/guide/introduction' },
|
{ text: 'Introduction', link: '/en/guide/introduction' },
|
||||||
|
{ text: 'Download', link: '/en/guide/download' },
|
||||||
{ text: 'Installation', link: '/en/guide/installation' },
|
{ text: 'Installation', link: '/en/guide/installation' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Networking',
|
text: 'Command Line Networking',
|
||||||
link: '/en/guide/networking',
|
link: '/en/guide/networking',
|
||||||
items: [
|
items: [
|
||||||
{ text: 'Peer to Peer Networking', link: '/en/guide/network/two-node-networking' },
|
{ text: 'Quick Networking', link: '/en/guide/network/fast-networking' },
|
||||||
{ text: 'Multi Peers Networking', link: '/en/guide/network/multi-node-networking' },
|
{ text: 'Decentralized Networking', link: '/en/guide/network/decentralized-networking' },
|
||||||
{ text: 'Subnet Proxy', link: '/en/guide/network/point-to-networking' },
|
{ text: 'Networking with Web Console', link: '/en/guide/network/web-console' },
|
||||||
{ text: 'Network to Network', link: '/en/guide/network/network-to-network' },
|
{ text: 'Using WireGuard Client', link: '/en/guide/network/use-easytier-with-wireguard-client' },
|
||||||
{ text: 'Without Public IP', link: '/en/guide/network/networking-without-public-ip' },
|
{ text: 'Subnet Proxy (Point-to-Network)', link: '/en/guide/network/point-to-networking' },
|
||||||
{ text: 'Use WireGuard Client', link: '/en/guide/network/use-easytier-with-wireguard-client' },
|
{ text: 'Advanced Features', collapsed: true, items: [
|
||||||
{ text: 'SOCKS5', link: '/en/guide/network/socks5' },
|
{ text: 'Network-to-Network', link: '/en/guide/network/network-to-network' },
|
||||||
{ text: 'Rootless mode (no TUN)', link: '/en/guide/network/no-root' },
|
{ text: 'No TUN Mode (No Root Required)', link: '/en/guide/network/no-root' },
|
||||||
{ text: 'Self-hosted Public Server', link: '/en/guide/network/host-public-server' },
|
{ text: 'SOCKS5', link: '/en/guide/network/socks5' },
|
||||||
{ text: 'Installing as a Windows Service (Auto start on boot)', link: '/en/guide/network/install-as-a-windows-service' },
|
{ text: 'Hosting Public Server', link: '/en/guide/network/host-public-server' },
|
||||||
{ text: 'Installing as a Linux Systemd Service', link: '/en/guide/network/install-as-a-systemd-service' },
|
{ text: 'P2P Optimization', link: '/en/guide/network/p2p-optimize' },
|
||||||
{ text: 'Installing as a macOS Service', link: '/en/guide/network/install-as-a-macos-service' },
|
] },
|
||||||
|
{ text: 'Autostart (Register Service)', collapsed: true, items: [
|
||||||
|
{ text: 'Install as Windows Service', link: '/en/guide/network/install-as-a-windows-service' },
|
||||||
|
{ text: 'Install as Linux systemd Service', link: '/en/guide/network/install-as-a-systemd-service' },
|
||||||
|
{ text: 'Install as macOS Service', link: '/en/guide/network/install-as-a-macos-service' },
|
||||||
|
] },
|
||||||
{ text: 'Other Configurations', link: '/en/guide/network/configurations' },
|
{ text: 'Other Configurations', link: '/en/guide/network/configurations' },
|
||||||
{ text: 'Configuration File', link: '/en/guide/network/config-file' },
|
{ text: 'Configuration File', link: '/en/guide/network/config-file' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
text: 'GUI Networking',
|
||||||
|
link: '/en/guide/gui/index',
|
||||||
items: [
|
items: [
|
||||||
|
{ text: 'Public Server Networking', link: '/en/guide/gui/basic' },
|
||||||
|
{ text: 'Manual Networking', link: '/en/guide/gui/manual' },
|
||||||
|
{ text: 'WireGuard Access', link: '/en/guide/gui/vpn_portal' },
|
||||||
|
{ text: 'Subnet Proxy', link: '/en/guide/gui/subnet_proxy' },
|
||||||
|
{ text: 'EasyTier Manager', link: '/en/guide/gui/easytier-manager' },
|
||||||
|
{ text: 'EasyTier Game Launcher', link: '/en/guide/gui/easytier-game' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{ text: 'Performance Testing', link: '/en/guide/perf' },
|
||||||
{ text: 'Roadmap', link: '/en/guide/roadmap' },
|
{ text: 'Roadmap', link: '/en/guide/roadmap' },
|
||||||
{ text: 'Community and Contribution', link: '/en/guide/community-and-contribution' },
|
{ text: 'Community and Contribution', link: '/en/guide/community-and-contribution' },
|
||||||
{ text: 'License', link: '/en/guide/license' },
|
{ text: 'License', link: '/en/guide/license' },
|
||||||
@@ -43,18 +63,67 @@ export const en = defineConfig({
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
nav: [
|
nav: [
|
||||||
{ text: 'Enter Web Console', link: 'https://easytier.cn/web' },
|
{
|
||||||
|
text: '<iconify-icon icon="fa6-solid:gears" style="margin-right:0.25rem;color:#3498db;"></iconify-icon>Web Console',
|
||||||
|
link: 'https://easytier.cn/web',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '<iconify-icon icon="fa6-solid:bug" style="margin-right:0.25rem;color:#FF4500;" alt="bug"></iconify-icon>Submit Feedback',
|
||||||
|
link: 'https://github.com/EasyTier/EasyTier/issues',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '<iconify-icon icon="fa6-solid:clipboard-list" style="margin-right:0.25rem;color:#FF6347;" alt="clipboard"></iconify-icon>Changelog',
|
||||||
|
link: 'https://github.com/EasyTier/EasyTier/releases',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
footer: {
|
footer: {
|
||||||
message: 'Released under the Apache License 2.0.',
|
message: 'Released under the Apache License 2.0',
|
||||||
copyright: 'Copyright © 2024-present EasyTier | '
|
copyright: 'Copyright © 2024-present EasyTier | '
|
||||||
+ '<a href="https://beian.miit.gov.cn/">'
|
+ '<a href="https://beian.miit.gov.cn/">'
|
||||||
+ '<img src="https://img.alicdn.com/tfs/TB1..50QpXXXXX7XpXXXXXXXXXX-40-40.png" alt="ICP 备案" style="width: 16px; height: 16px; display: inline-block; margin-bottom: -4px;">'
|
+ '<img src="https://img.alicdn.com/tfs/TB1..50QpXXXXX7XpXXXXXXXXXX-40-40.png" alt="ICP Record" style="width: 16px; height: 16px; display: inline-block; margin-bottom: -4px;">'
|
||||||
+ '浙ICP备2024137671号-1</a>',
|
+ 'Zhejiang ICP No. 2024137671-1</a>',
|
||||||
},
|
},
|
||||||
editLink: {
|
editLink: {
|
||||||
pattern: 'https://github.com/EasyTier/easytier.github.io/main/dev/:path',
|
pattern: 'https://github.com/EasyTier/easytier.github.io/edit/main/:path',
|
||||||
text: 'Edit this page on GitHub',
|
text: 'Edit this page on GitHub',
|
||||||
},
|
},
|
||||||
|
docFooter: {
|
||||||
|
prev: 'Previous Page',
|
||||||
|
next: 'Next Page',
|
||||||
|
},
|
||||||
|
outline: {
|
||||||
|
label: 'Page Navigation',
|
||||||
|
},
|
||||||
|
lastUpdated: {
|
||||||
|
text: 'Last Updated',
|
||||||
|
formatOptions: {
|
||||||
|
dateStyle: 'short',
|
||||||
|
timeStyle: 'medium',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
langMenuLabel: 'Languages',
|
||||||
|
returnToTopLabel: 'Back to Top',
|
||||||
|
sidebarMenuLabel: 'Menu',
|
||||||
|
darkModeSwitchLabel: 'Theme',
|
||||||
|
lightModeSwitchTitle: 'Switch to Light Mode',
|
||||||
|
darkModeSwitchTitle: 'Switch to Dark Mode',
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
export const enSearch = {
|
||||||
|
translations: {
|
||||||
|
button: {
|
||||||
|
buttonText: 'Search Docs',
|
||||||
|
buttonAriaLabel: 'Search Docs',
|
||||||
|
},
|
||||||
|
modal: {
|
||||||
|
noResultsText: 'No results found',
|
||||||
|
resetButtonTitle: 'Clear search query',
|
||||||
|
footer: {
|
||||||
|
selectText: 'Select',
|
||||||
|
navigateText: 'Navigate',
|
||||||
|
closeText: 'Close',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
|
// @ts-expect-error ignore next line
|
||||||
|
import taskLists from 'markdown-it-task-lists'
|
||||||
import { withMermaid } from 'vitepress-plugin-mermaid'
|
import { withMermaid } from 'vitepress-plugin-mermaid'
|
||||||
|
|
||||||
import { en } from './en'
|
|
||||||
import { cn, cnSearch } from './cn'
|
import { cn, cnSearch } from './cn'
|
||||||
|
|
||||||
|
import { en } from './en'
|
||||||
|
|
||||||
export default withMermaid({
|
export default withMermaid({
|
||||||
title: 'EasyTier',
|
title: 'EasyTier',
|
||||||
base: '/',
|
base: '/',
|
||||||
lastUpdated: true,
|
lastUpdated: true,
|
||||||
head: [
|
head: [
|
||||||
['link', { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/assets/easytier.png' }],
|
['link', { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/easytier.png' }],
|
||||||
],
|
],
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
logo: '/easytier.png',
|
logo: '/easytier.png',
|
||||||
@@ -20,9 +23,45 @@ export default withMermaid({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
socialLinks: [
|
||||||
|
{
|
||||||
|
icon: 'github',
|
||||||
|
link: 'https://github.com/EasyTier/Easytier',
|
||||||
|
ariaLabel: 'Github',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: 'gmail',
|
||||||
|
link: 'mailto:sunsijie@buaa.edu.cn',
|
||||||
|
ariaLabel: 'Email',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: 'qq',
|
||||||
|
link: 'https://qm.qq.com/q/wFoTUChqZW',
|
||||||
|
ariaLabel: 'qq',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: {
|
||||||
|
svg: '<iconify-icon icon="twemoji:red-heart" style="font-size:1.2em" alt="Github Sponsors"></iconify-icon>',
|
||||||
|
},
|
||||||
|
link: '/#sponsor',
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
locales: {
|
locales: {
|
||||||
root: { label: '简体中文', ...cn },
|
root: { label: '简体中文', ...cn },
|
||||||
en: { label: 'English', ...en },
|
en: { label: 'English', ...en },
|
||||||
},
|
},
|
||||||
|
markdown: {
|
||||||
|
config: (md) => {
|
||||||
|
md.use(taskLists)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
vue: {
|
||||||
|
template: {
|
||||||
|
compilerOptions: { isCustomElement: tag => tag === 'iconify-icon' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
sitemap: {
|
||||||
|
hostname: 'https://easytier.cn',
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import type { TwikooData } from '@theojs/lumen'
|
||||||
|
|
||||||
|
export const Twikoo_Data: TwikooData = {
|
||||||
|
envId: 'https://twikoo.easytier.cn', // 修改成部署的Twikoo地址
|
||||||
|
}
|
||||||
@@ -1,7 +1,24 @@
|
|||||||
|
import type { EnhanceAppContext } from 'vitepress'
|
||||||
|
|
||||||
|
import { baiduAnalytics, HomeUnderline, trackPageview } from '@theojs/lumen'
|
||||||
|
|
||||||
import DefaultTheme from 'vitepress/theme'
|
import DefaultTheme from 'vitepress/theme'
|
||||||
import Layout from './layout.vue'
|
import Layout from './layout.vue'
|
||||||
|
|
||||||
|
import '@theojs/lumen/theme'
|
||||||
|
import '@theojs/lumen/doc-blocks-border'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
extends: DefaultTheme,
|
extends: DefaultTheme,
|
||||||
Layout,
|
Layout,
|
||||||
}
|
|
||||||
|
enhanceApp: (ctx: EnhanceAppContext) => {
|
||||||
|
const { app } = ctx
|
||||||
|
baiduAnalytics({ baiduId: '0afa8cd5bd78fd0c960f8af5dc6af333' })
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
trackPageview('0afa8cd5bd78fd0c960f8af5dc6af333', window.location.href)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.component('Home', HomeUnderline)
|
||||||
|
},
|
||||||
|
} as any
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { ShareButton, Twikoo } from '@theojs/lumen'
|
||||||
import { useData } from 'vitepress'
|
import { useData } from 'vitepress'
|
||||||
import DefaultTheme from 'vitepress/theme'
|
import DefaultTheme from 'vitepress/theme'
|
||||||
import { nextTick, provide } from 'vue'
|
|
||||||
|
import { h, nextTick, provide } from 'vue'
|
||||||
|
|
||||||
|
import { Twikoo_Data } from '../data/Twikoo'
|
||||||
|
|
||||||
const { isDark } = useData()
|
const { isDark } = useData()
|
||||||
|
|
||||||
@@ -24,7 +28,6 @@ provide('toggle-appearance', async ({ clientX: x, clientY: y }: MouseEvent) => {
|
|||||||
)}px at ${x}px ${y}px)`,
|
)}px at ${x}px ${y}px)`,
|
||||||
]
|
]
|
||||||
|
|
||||||
// @ts-expect-error no function
|
|
||||||
await document.startViewTransition(async () => {
|
await document.startViewTransition(async () => {
|
||||||
isDark.value = !isDark.value
|
isDark.value = !isDark.value
|
||||||
await nextTick()
|
await nextTick()
|
||||||
@@ -39,10 +42,15 @@ provide('toggle-appearance', async ({ clientX: x, clientY: y }: MouseEvent) => {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const Layout = h(DefaultTheme.Layout, null, {
|
||||||
|
'aside-outline-before': () => h(ShareButton),
|
||||||
|
'doc-after': () => h(Twikoo, { Twikoo_Data }),
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<DefaultTheme.Layout />
|
<Layout />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@@ -62,15 +70,70 @@ provide('toggle-appearance', async ({ clientX: x, clientY: y }: MouseEvent) => {
|
|||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.VPSwitchAppearance {
|
|
||||||
width: 22px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.VPSwitchAppearance .check {
|
|
||||||
transform: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer.VPFooter {
|
footer.VPFooter {
|
||||||
display: block !important;
|
display: block !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.filter-select {
|
||||||
|
/* styling */
|
||||||
|
border: thin solid rgb(5, 176, 142);
|
||||||
|
border-radius: 4px;
|
||||||
|
display: inline-block;
|
||||||
|
font: inherit;
|
||||||
|
line-height: 1em;
|
||||||
|
padding: 0.5em 3.5em 0.5em 1em;
|
||||||
|
|
||||||
|
/* reset */
|
||||||
|
|
||||||
|
margin: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
|
||||||
|
min-width: 15rem;
|
||||||
|
|
||||||
|
background-image: linear-gradient(45deg, transparent 50%, gray 50%),
|
||||||
|
linear-gradient(135deg, gray 50%, transparent 50%), linear-gradient(to right, #ccc, #ccc);
|
||||||
|
background-position:
|
||||||
|
calc(100% - 20px) calc(1em),
|
||||||
|
calc(100% - 15px) calc(1em),
|
||||||
|
calc(100% - 2.5em) 0.5em;
|
||||||
|
background-size:
|
||||||
|
5px 5px,
|
||||||
|
5px 5px,
|
||||||
|
1px 1.5em;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filter-select:focus {
|
||||||
|
background-image: linear-gradient(45deg, green 50%, transparent 50%),
|
||||||
|
linear-gradient(135deg, transparent 50%, green 50%), linear-gradient(to right, #ccc, #ccc);
|
||||||
|
background-position:
|
||||||
|
calc(100% - 15px) 1em,
|
||||||
|
calc(100% - 20px) 1em,
|
||||||
|
calc(100% - 2.5em) 0.5em;
|
||||||
|
background-size:
|
||||||
|
5px 5px,
|
||||||
|
5px 5px,
|
||||||
|
1px 1.5em;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
border-color: green;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.download-link-span {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0.1rem;
|
||||||
|
color: #666 !important;
|
||||||
|
border: 1px solid #666;
|
||||||
|
padding: 0.1rem 0.3rem;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
text-decoration: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.download-link-span:hover {
|
||||||
|
background-color: #e0e0e0;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 984 B |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 4.8 KiB |
@@ -4,7 +4,9 @@ import StarHistory from '../../.vitepress/components/starHistory.vue'
|
|||||||
|
|
||||||
# Community and Contribution
|
# Community and Contribution
|
||||||
|
|
||||||
We welcome and encourage community contributions! If you want to get involved, please submit a [GitHub PR](https://github.com/EasyTier/EasyTier/pulls). Detailed contribution guidelines can be found in [CONTRIBUTING.md](https://github.com/EasyTier/EasyTier/blob/main/CONTRIBUTING.md).
|
We welcome and encourage community contributions! If you want to get involved, please submit a [GitHub PR](https://github.com/EasyTier/EasyTier/pulls).
|
||||||
|
|
||||||
|
Detailed contribution guidelines can be found in the [Contributing](https://github.com/EasyTier/EasyTier/blob/main/CONTRIBUTING.md) document.
|
||||||
|
|
||||||
## Star History
|
## Star History
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Contact
|
# Contact Information
|
||||||
|
|
||||||
- Ask questions or report problems: [GitHub Issues](https://github.com/EasyTier/EasyTier/issues)
|
- Ask questions or report issues: [GitHub Issues](https://github.com/EasyTier/EasyTier/issues)
|
||||||
- Discussion and exchange: [GitHub Discussions](https://github.com/EasyTier/EasyTier/discussions)
|
- Discussion and communication: [GitHub Discussions](https://github.com/EasyTier/EasyTier/discussions)
|
||||||
- QQ Group: [949700262](https://qm.qq.com/q/LDxBN5L3kA)
|
- QQ Group: [949700262](https://qm.qq.com/q/LDxBN5L3kA)
|
||||||
- Telegram: https://t.me/easytier
|
- Telegram: https://t.me/easytier
|
||||||
|
|||||||
@@ -0,0 +1,201 @@
|
|||||||
|
---
|
||||||
|
home: hello
|
||||||
|
---
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { data } from '../../metadata.data.js'
|
||||||
|
|
||||||
|
interface Package {
|
||||||
|
os: string
|
||||||
|
arch: string
|
||||||
|
gui_pkg_tmpl: record<string, string>
|
||||||
|
cli_pkg_tmpl: record<string, string> // key: format, value: url
|
||||||
|
comment?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
function gen_pkg_without_gui(os: string, archs: string[]): Package[] {
|
||||||
|
return archs.map(arch => {
|
||||||
|
return {
|
||||||
|
os,
|
||||||
|
arch,
|
||||||
|
gui_pkg_tmpl: {},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": `https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-${arch}-v{}.zip`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const packages = ref<Package[]>([
|
||||||
|
{
|
||||||
|
os: 'Windows',
|
||||||
|
arch: 'x86_64',
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"exe": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_x64-setup.exe'
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-windows-x86_64-v{}.zip'
|
||||||
|
},
|
||||||
|
comment: "Windows 7 requires SP1 or above, and the installation of KB3063858 and KB4474419 patches"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "Windows",
|
||||||
|
arch: "arm64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"exe": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_arm64-setup.exe'
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-windows-arm64-v{}.zip'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "Linux",
|
||||||
|
arch: "x86_64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"deb": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_amd64.deb',
|
||||||
|
"AppImage": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_amd64.AppImage',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-x86_64-v{}.zip',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "Linux",
|
||||||
|
arch: "aarch64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"deb": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_arm64.deb',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-aarch64-v{}.zip',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
...gen_pkg_without_gui("Linux", ["arm", "armhf", "armv7", "armv7hf", "mips", "mipsel"]),
|
||||||
|
{
|
||||||
|
os: "MacOS",
|
||||||
|
arch: "x86_64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"dmg": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_x64.dmg',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-macos-x86_64-v{}.zip',
|
||||||
|
},
|
||||||
|
comment: "After installing the GUI, you need to manually execute xattr -c /Applications/easytier-gui.app, otherwise it will prompt that the file is damaged"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "MacOS",
|
||||||
|
arch: "aarch64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"dmg": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_aarch64.dmg',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-macos-aarch64-v{}.zip',
|
||||||
|
},
|
||||||
|
comment: "After installing the GUI, you need to manually execute xattr -c /Applications/easytier-gui.app, otherwise it will prompt that the file is damaged"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "Android",
|
||||||
|
arch: "universal",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-universal-release.apk',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {},
|
||||||
|
comment: "If you encounter abnormal display issues, please try upgrading WebView"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "FreeBSD 13.2",
|
||||||
|
arch: "x86_64",
|
||||||
|
gui_pkg_tmpl: {},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-freebsd-13.2-x86_64-v{}.zip',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
const all_archs = new Set(packages.value.map(pkg => pkg.arch))
|
||||||
|
const all_os = new Set(packages.value.map(pkg => pkg.os))
|
||||||
|
const all_proxy = new Set(data.github_accels)
|
||||||
|
|
||||||
|
const version = ref(data.easytier_latest_version)
|
||||||
|
|
||||||
|
const url = 'https://github.com/EasyTier/EasyTier/releases/tag/v'
|
||||||
|
const filter_os = ref('')
|
||||||
|
const filter_arch = ref('')
|
||||||
|
const accel_proxy = ref('')
|
||||||
|
|
||||||
|
function renderUrlTmpl(url_tmpl: string): string {
|
||||||
|
return accel_proxy.value + url_tmpl.replace(/\{\}/g, version.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
# Download { #download }
|
||||||
|
|
||||||
|
You can directly go to the [GitHub Release page](https://github.com/EasyTier/EasyTier/releases) to view the download links for all versions, or use the table below to find the version that suits you.
|
||||||
|
|
||||||
|
The command line program package includes three executables:
|
||||||
|
|
||||||
|
- `easytier-core`: The core program of EasyTier
|
||||||
|
- `easytier-cli`: EasyTier management program, after starting easytier-core, you can use easytier-cli to view virtual network information
|
||||||
|
- `easytier-web`: Used for self-hosting the EasyTier Web console backend, generally no need to self-host, you can use the official Web console
|
||||||
|
|
||||||
|
## <a :href="url + version">EasyTier v{{ version }}</a> { #latest }
|
||||||
|
|
||||||
|
- GitHub Acceleration
|
||||||
|
<div>
|
||||||
|
<select name="pets" id="gh-accel-select" v-model="accel_proxy" class="filter-select">
|
||||||
|
<option value=""> Direct </option>
|
||||||
|
<option v-for="p in all_proxy" :value="p"> {{ p }} </option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- Filter by Operating System
|
||||||
|
<div>
|
||||||
|
<select name="pets" id="os-select" v-model="filter_os" class="filter-select">
|
||||||
|
<option value=""> All </option>
|
||||||
|
<option v-for="os in all_os" :value="os"> {{ os }} </option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- Filter by Hardware Architecture
|
||||||
|
<div>
|
||||||
|
<select name="pets" id="arch-select" v-model="filter_arch" class="filter-select">
|
||||||
|
<option value=""> All </option>
|
||||||
|
<option v-for="arch in all_archs" :value="arch"> {{ arch }} </option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
|
||||||
|
<thead>
|
||||||
|
<td> Operating System </td>
|
||||||
|
<td> Hardware Architecture </td>
|
||||||
|
<td> GUI Program </td>
|
||||||
|
<td> CLI Program </td>
|
||||||
|
<td> Notes </td>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tr v-for="pkg in packages" v-show="(!filter_os || pkg.os === filter_os) && (!filter_arch || pkg.arch === filter_arch)">
|
||||||
|
|
||||||
|
<td> {{ pkg.os }} </td>
|
||||||
|
<td> {{ pkg.arch }} </td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<a v-for="(url_tmpl, format) in pkg.gui_pkg_tmpl" class="download-link-span" :href="renderUrlTmpl(url_tmpl)">
|
||||||
|
{{format}}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<a v-for="(url_tmpl, format) in pkg.cli_pkg_tmpl" class="download-link-span" :href="renderUrlTmpl(url_tmpl)">
|
||||||
|
{{format}}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{{ pkg.comment }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Public Server Networking
|
||||||
|
|
||||||
|
Currently, a small bandwidth public server is provided to facilitate networking for friends without a public server. In most cases, P2P tunneling can be successful. If P2P tunneling fails, the bandwidth between nodes may be relatively low.
|
||||||
|
|
||||||
|
The configuration method is shown in the figure.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
After the configuration is complete, click the Run Network button. The interface after the network runs successfully is shown in the figure.
|
||||||
|
|
||||||
|

|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# [EasyTier Game Launcher](https://github.com/EasyTier/EasytierGame)
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
EasyTierGame is a game launcher developed with `nuxt3`, `typescript`, `rust`, and `tauri`.
|
||||||
|
It features a simple interface and includes the latest EasyTier core, providing a comfortable experience both psychologically and practically when playing online. It also supports custom configuration file launches to meet various needs.
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
Github
|
||||||
|
Releases: [https://github.com/EasyTier/EasytierGame/releases](https://github.com/EasyTier/EasytierGame/releases)
|
||||||
|
|
||||||
|
- Only a green zip package is available. I personally dislike installers that write to the registry. Just extract and use, keeping the directory clean and tidy.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Tutorial
|
||||||
|
|
||||||
|
- For the first use, enter a "hostname" and click to start the game. You can later create your own server or use servers provided by community members.
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- There are some special configurations in the advanced options that you can choose from.
|
||||||
|

|
||||||
|
|
||||||
|
- If your needs are still not met, you can use a configuration file to start the game. For details on how to configure, refer to the documentation [Configuration File](/guide/network/config-file.html).
|
||||||
|

|
||||||
|
|
||||||
|
- After upgrading the EasyTier core, you can click the update plugin button to update. However, you need to use a VPN. If you cannot update, you can get the update from the community.
|
||||||
|

|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Developed based on the EasyTier networking tool, with a clear and simple interface.
|
||||||
|
- Comes with an "update" button. When a new version of the EasyTier networking tool is released, click update to get it (requires a VPN).
|
||||||
|
- For the first use, enter a "hostname" and click to start the game. You can later create your own server or use servers provided by community members.
|
||||||
|
- Simple configuration with advanced features, also supports custom configuration file launches.
|
||||||
|
- **WinIPBroadcast** is enabled by default, so you no longer have to worry about not finding rooms when playing online (e.g., Borderlands 3).
|
||||||
|
- Tested and stable for online play with **Elden Ring**, **Borderlands 3**, **Deep Rock Galactic**, **Monster Hunter: World**, and more.
|
||||||
|
|
||||||
|
## System Support
|
||||||
|
|
||||||
|
Supports Windows 11, Windows 10, and Windows 7.
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
# [EasyTier Manager](https://github.com/xlc520/easytier-manager)
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
Github
|
||||||
|
Releases: [https://github.com/xlc520/easytier-manager/releases](https://github.com/xlc520/easytier-manager/releases)
|
||||||
|
|
||||||
|
#### Package Descriptions
|
||||||
|
|
||||||
|
- `exe`: Installer, needs to be installed before use
|
||||||
|
- `zip`: No installation required, just unzip to use
|
||||||
|
- `easytier-manager-win_2.0.0.exe`: Universal installer for 64-bit and 32-bit Windows systems
|
||||||
|
- `easytier-manager-win-x64_2.0.0.exe`: Installer for 64-bit Windows systems
|
||||||
|
- `easytier-manager-win-ia32_2.0.0.exe`: Installer for 32-bit Windows systems
|
||||||
|
- `easytier-manager-win7-x64_2.0.0.exe`: Installer for 64-bit Windows 7 systems
|
||||||
|
- `tar.gz` `deb` `rpm` `AppImage`: For use on Linux systems (untested)
|
||||||
|
|
||||||
|
## Tutorial
|
||||||
|
|
||||||
|
- **1. [Important] On the settings page, check if the kernel exists. If not, download and install the kernel, then check again** (only needed for the first use, subsequent uses can run directly if the kernel exists)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- 2. On the configuration page, create a new network configuration, either by editing the code directly or by filling out a form
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- 3. On the workspace (home page), run the specified configuration
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- 4. [Optional] After the network is successfully configured, you can exit the manager if there are no connection issues. The core program will run in the background (right-click the tray icon and select `exit`)
|
||||||
|
|
||||||
|
- 5. [Optional] On the configuration page, install the specified configuration as a system service
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
EasyTier Manager integrates Vue3 + Vite5 + Electron33 + Element-Plus. It is a free and open-source network management tool based on `element-plus`. It is developed using the latest technologies such as `vue3`, `vite5`, and `TypeScript`.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Memory Usage**: After the network is successfully configured, you can exit the manager without affecting the network, so it won't occupy memory or cause memory leaks
|
||||||
|
- **Multiple Configurations**: Supports running and managing multiple network configurations
|
||||||
|
- **System Service Installation**: One-click installation as a system service with automatic startup on boot
|
||||||
|
- **Visual Configuration**: Provides a form for visual network configuration, making it simple and convenient
|
||||||
|
- **Visual Log Viewing**: View logs of the current network configuration on the home page
|
||||||
|
- **One-Click Download and Install**: One-click download and install of the kernel with built-in accelerated sources, no manual download required
|
||||||
|
- **Latest Tech Stack**: Developed using cutting-edge technologies like Electron33/Vue3/vite5
|
||||||
|
- **TypeScript**: A language for application-scale JavaScript
|
||||||
|
- **Internationalization**: Built-in comprehensive internationalization solution
|
||||||
|
|
||||||
|
## Bug Reports & Suggestions
|
||||||
|
|
||||||
|
> The project is stable and may not have new features developed, only bug fixes
|
||||||
|
|
||||||
|
Check [TODO](https://github.com/xlc520/easytier-manager/blob/master/TODO.md) to see if there are existing records to avoid duplication
|
||||||
|
|
||||||
|
[BUG Report | Feature Suggestion](https://github.com/xlc520/easytier-manager/issues/new/choose)
|
||||||
|
|
||||||
|
## System Support
|
||||||
|
|
||||||
|
Theoretically supports Windows 11, Windows 10, Windows 7
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Graphical User Interface (GUI) Networking
|
||||||
|
|
||||||
|
The graphical interface program can also be downloaded from the GitHub Release page, with the prefix easytier-gui.
|
||||||
|
|
||||||
|
Note that after installation on MacOS, you need to execute the following command in the terminal, otherwise, it will mistakenly report that the file is damaged.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
xattr -c /Applications/easytier-gui.app
|
||||||
|
```
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# 手动组网
|
||||||
|
|
||||||
|
EasyTier 不区分客户端服务端,且完全去中心化,新增节点只需与虚拟网络中的任意节点建链即可加入组网。配置方法如下图所示。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Subnet Proxy
|
||||||
|
|
||||||
|
By setting up a subnet proxy, you can connect the local area network and the virtual local area network.
|
||||||
|
|
||||||
|
Assuming the devices at home are in the 192.168.1.0/24 subnet, and you want to access any device at home from the company, you can start an EasyTier node at home and add a subnet proxy for 192.168.1.0/24. No additional configuration is needed on the company's devices; simply connect to the home node successfully, and you can access any device at home.
|
||||||
|
|
||||||
|

|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# WireGuard Access
|
||||||
|
|
||||||
|
Each node in EasyTier can act as a WireGuard server, allowing mobile devices such as Android and iOS to easily access devices in the virtual LAN.
|
||||||
|
|
||||||
|
Configuration method as shown in the figure.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Click the "Show WireGuard Portal Configuration" button on the network success page to view the client configuration file. Import this configuration file into a third-party client on your phone to allow the phone to access the virtual LAN.
|
||||||
|
|
||||||
|

|
||||||
@@ -1,84 +1,98 @@
|
|||||||
# Installation {#installation}
|
# Installation {#installation}
|
||||||
|
|
||||||
1. **Download the precompiled binary file**
|
## Installation Methods
|
||||||
Visit the [GitHub Release page](https://github.com/EasyTier/EasyTier/releases) to download the binary file suitable for your operating system. Release includes both command-line programs and GUI programs in the compressed package.
|
|
||||||
|
1. **Download Precompiled Binaries (Recommended)**
|
||||||
|
|
||||||
|
Visit the [⬇️Download Page](./download) to download the binaries or installation packages for your operating system.
|
||||||
|
|
||||||
2. **Install via crates.io**
|
2. **Install via crates.io**
|
||||||
|
|
||||||
::: code-group
|
|
||||||
|
|
||||||
```sh [cargo]
|
```sh [cargo]
|
||||||
cargo install easytier
|
cargo install easytier
|
||||||
```
|
```
|
||||||
|
|
||||||
:::
|
3. **DockerHub**
|
||||||
|
|
||||||
3. **Install from source code**
|
[DockerHub Image](https://hub.docker.com/layers/easytier/easytier)
|
||||||
::: code-group
|
|
||||||
```sh [cargo]
|
```sh [docker]
|
||||||
cargo install --git https://github.com/EasyTier/EasyTier.git
|
docker pull easytier/easytier:latest
|
||||||
```
|
```
|
||||||
:::
|
|
||||||
|
|
||||||
4. **Install via Docker Compose**
|
4. **Install via Docker Compose**
|
||||||
|
|
||||||
::: code-group
|
::: details docker-compose.yml
|
||||||
|
|
||||||
```yaml [docker-compose.yml]
|
```yaml [docker-compose.yml]
|
||||||
version: "3.8"
|
version: '3.8'
|
||||||
services:
|
services:
|
||||||
watchtower: # Used to automatically update the easytier image, delete this part if not needed
|
watchtower: # Used to automatically update the easytier image, delete this part if not needed
|
||||||
command: --interval 3600 --cleanup --label-enable
|
command: --interval 3600 --cleanup --label-enable
|
||||||
container_name: watchtower
|
container_name: watchtower
|
||||||
environment:
|
environment:
|
||||||
- WATCHTOWER_NO_STARTUP_MESSAGE
|
- TZ=Asia/Shanghai
|
||||||
image: containrrr/watchtower
|
- WATCHTOWER_NO_STARTUP_MESSAGE
|
||||||
restart: always
|
image: containrrr/watchtower
|
||||||
volumes:
|
restart: always
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
volumes:
|
||||||
easytier:
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
restart: always
|
easytier:
|
||||||
labels:
|
restart: always
|
||||||
com.centurylinklabs.watchtower.enable: "true"
|
labels:
|
||||||
privileged: true
|
com.centurylinklabs.watchtower.enable: 'true'
|
||||||
mem_limit: 0m
|
privileged: true
|
||||||
container_name: easytier
|
mem_limit: 0m
|
||||||
hostname: easytier
|
container_name: easytier
|
||||||
network_mode: host
|
hostname: easytier
|
||||||
volumes:
|
network_mode: host
|
||||||
- /etc/easytier:/root
|
volumes:
|
||||||
environment:
|
- /etc/easytier:/root
|
||||||
- TZ=Asia/Shanghai
|
environment:
|
||||||
image: easytier/easytier:latest
|
- TZ=Asia/Shanghai
|
||||||
command: -i <ip> --network-name <user> --network-secret <password> -e tcp://<server address>:11010 -l <listen address>
|
image: easytier/easytier:latest
|
||||||
|
command: -i <ip> --network-name <user> --network-secret <password> -p tcp://<server_address>:11010
|
||||||
```
|
```
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
5. One-Click Installation Script (For Linux Only)
|
5. **One-Click Installation Script (Linux Only)**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/install.sh" && bash /tmp/easytier.sh install
|
wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/install.sh" && bash /tmp/easytier.sh install
|
||||||
```
|
```
|
||||||
|
|
||||||
# Frequently Asked Questions
|
6. **Install from Source**
|
||||||
|
|
||||||
## Question 1
|
```sh [cargo]
|
||||||
|
cargo install --git https://github.com/EasyTier/EasyTier.git easytier
|
||||||
|
```
|
||||||
|
|
||||||
Q: On Windows 7, I cannot create a network, the program crashes or fails to create a virtual network.
|
## Third-Party Tools
|
||||||
|
|
||||||
A: Windows 7 must be Service Pack 1 (SP1) or later, and you need to install the patches [KB3063858](https://www.microsoft.com/en-us/download/details.aspx?id=47409) and [KB4474419](https://www.catalog.update.microsoft.com/search.aspx?q=KB4474419).
|
- [EasyTier Game (Windows)](/guide/gui/easytier-game)
|
||||||
|
- [EasyTier Manager (Windows)](/guide/gui/easytier-manager)
|
||||||
|
- [luci-app-easytier (OpenWrt)](https://github.com/EasyTier/luci-app-easytier)
|
||||||
|
|
||||||
## Question 2
|
## FAQ {#faq}
|
||||||
|
|
||||||
Q: The command-line help in Linux is in English, how can I switch it to Chinese?
|
### Question 1
|
||||||
|
|
||||||
A: You need to set the environment variable `LANG=zh_CN`. Command: `export LANG=zh_CN`
|
Q: Unable to create a network on Windows 7, the program crashes or reports an error that it cannot create a virtual network.
|
||||||
|
|
||||||
## Question 3
|
A: Windows 7 requires SP1 or above, and the installation of [KB3063858](https://www.microsoft.com/en-us/download/details.aspx?id=47409) and [KB4474419](https://www.catalog.update.microsoft.com/search.aspx?q=KB4474419) patches.
|
||||||
|
|
||||||
Q: After starting, I get a TunError message.
|
### Question 2
|
||||||
|
|
||||||
A: Ensure that the TUN driver has been correctly loaded and that the file `/dev/net/tun` exists. If using Docker, make sure privilege mode is enabled. To load the Linux TUN driver:
|
Q: The Linux command line help is in English, how to change it to Chinese?
|
||||||
|
|
||||||
|
A: You need to set the environment variable LANG=zh_CN, command: `export LANG=zh_CN`
|
||||||
|
|
||||||
|
### Question 3
|
||||||
|
|
||||||
|
Q: TunError is prompted after startup.
|
||||||
|
|
||||||
|
A: Ensure that the TUN driver is correctly loaded and the `/dev/net/tun` file exists. If using Docker, make sure to enable privileged mode. The method to load the Linux TUN driver is:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
modprobe tun
|
modprobe tun
|
||||||
|
|||||||
@@ -1,23 +1,23 @@
|
|||||||
# Introduction
|
# Feature Overview
|
||||||
|
|
||||||
EasyTier is a simple, safe and decentralized SD-WAN networking solution implemented with the Rust language and Tokio framework.
|
A simple, secure, decentralized SD-WAN solution for remote networking, implemented using Rust and the Tokio framework.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Decentralized**: No need to rely on centralized services, nodes are equal and independent.
|
- **Decentralized**: No need to rely on centralized services, nodes are equal and independent.
|
||||||
- **Safe**: Use WireGuard protocol to encrypt data.
|
- **Secure**: Supports encrypted communication using WireGuard, and also supports AES-GCM encryption to protect relay traffic.
|
||||||
- **High Performance**: Full-link zero-copy, with performance comparable to mainstream networking software.
|
- **High Performance**: Zero-copy throughout the entire link, performance comparable to mainstream networking software.
|
||||||
- **Cross-platform**: Supports MacOS/Linux/Windows/FreeBSD/Android, will support IOS in the future. The executable file is statically linked, making deployment simple.
|
- **Cross-Platform**: Supports MacOS/Linux/Windows/FreeBSD/Android, with future support for IOS. Executable files are statically linked, making deployment simple.
|
||||||
- **Networking without public IP**: Supports networking using shared public nodes, refer to [Configuration Guide](/guide/network/networking-without-public-ip)
|
- **Networking without Public IP**: Supports networking using shared public nodes, refer to [Configuration Guide](/guide/network/networking-without-public-ip)
|
||||||
- **NAT traversal**: Supports UDP-based NAT traversal, able to establish stable connections even in complex network environments.
|
- **NAT Traversal**: Supports UDP-based NAT traversal, enabling stable connections even in complex network environments.
|
||||||
- **Subnet Proxy (Point-to-Network)**: Nodes can expose accessible network segments as proxies to the virtual network, allowing other nodes to access these subnets through the node.
|
- **Subnet Proxy (Point-to-Network)**: Nodes can expose accessible subnets as proxies to the virtual network, allowing other nodes to access these subnets through the node.
|
||||||
- **Smart Routing**: Selects links based on traffic to reduce latency and increase throughput.
|
- **Intelligent Routing**: Intelligently selects links based on traffic to reduce latency and increase throughput.
|
||||||
- **TCP Support**: Provides reliable data transmission through concurrent TCP links when UDP is limited, optimizing performance.
|
- **TCP Support**: Provides reliable data transmission through concurrent TCP connections when UDP is restricted, optimizing performance.
|
||||||
- **High Availability**: Supports multi-path and switches to healthy paths when high packet loss or network errors are detected.
|
- **High Availability**: Supports multipath and switches to healthy paths when high packet loss or network errors are detected.
|
||||||
- **IPv6 Support**: Supports networking using IPv6.
|
- **IPV6 Support**: Supports networking using IPV6.
|
||||||
|
|
||||||
## GUI
|
## GUI
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
# License
|
# 许可证
|
||||||
|
|
||||||
EasyTier is released under the [Apache License 2.0](https://github.com/EasyTier/EasyTier/blob/main/LICENSE).
|
EasyTier 基于 [Apache License 2.0](https://github.com/EasyTier/EasyTier/blob/main/LICENSE) 许可发布。
|
||||||
|
|||||||
@@ -1,90 +1,15 @@
|
|||||||
# Configuration File
|
# Configuration File
|
||||||
|
|
||||||
Supports specifying the configuration file path using the -c parameter.
|
You can specify the configuration file path using the -c parameter.
|
||||||
|
|
||||||
Note: The configuration file has a higher priority. When a configuration file is specified at runtime, all command line parameters except for -c will be ignored and only the configuration file will take effect.
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./easytier-core -c ./config.toml
|
easytier-core -c ./config.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
You can run `./easytier-core` directly without using any parameters to obtain the minimal configuration file. By running the command with parameters, you can get a configuration file corresponding to those parameters. The configuration file will be printed on the command line, and you can manually copy the relevant configuration and save it as a TOML file.
|
::: warning Note
|
||||||
|
Note: The configuration file has a higher priority. When a configuration file is specified at runtime, all other command line parameters except `-c` will be ignored and only the configuration file will take effect.
|
||||||
|
:::
|
||||||
|
|
||||||
Below is an example of a configuration file along with annotations for various configuration options.
|
Running with parameters can generate a configuration file with the corresponding parameters. The configuration file will be printed in the command line, and you can manually copy and save it as a toml file.
|
||||||
|
|
||||||
```toml
|
Running `easytier-core` directly without parameters will generate the minimal configuration file.
|
||||||
# instance name to identify this node in same machine
|
|
||||||
instance_name = ""
|
|
||||||
# Hostname, used to identify the hostname of this device
|
|
||||||
hostname = ""
|
|
||||||
# Instance ID, usually a UUID, unique within the same network
|
|
||||||
instance_id = ""
|
|
||||||
# The IPv4 address of this node. If left empty, this node will only forward packets and will not create a TUN device
|
|
||||||
ipv4 = ""
|
|
||||||
# Automatically determined and assigned IP address by EasyTier, starting from 10.0.0.1 by default. Warning: When using DHCP, if an IP conflict occurs within the network, the IP address will be automatically changed.
|
|
||||||
dhcp = false
|
|
||||||
|
|
||||||
# List of listeners, used for accepting connections
|
|
||||||
listeners = [
|
|
||||||
"tcp://0.0.0.0:11010",
|
|
||||||
"udp://0.0.0.0:11010",
|
|
||||||
"wg://0.0.0.0:11011",
|
|
||||||
"ws://0.0.0.0:11011/",
|
|
||||||
"wss://0.0.0.0:11012/",
|
|
||||||
]
|
|
||||||
|
|
||||||
# List of exit nodes
|
|
||||||
exit_nodes = []
|
|
||||||
|
|
||||||
# Rpc portal address to listen for management
|
|
||||||
rpc_portal = "127.0.0.1:15888"
|
|
||||||
|
|
||||||
[network_identity]
|
|
||||||
# network name to identify this virtual network
|
|
||||||
network_name = ""
|
|
||||||
# network secret to verify this node belongs to the virtual network
|
|
||||||
network_secret = ""
|
|
||||||
|
|
||||||
# This is the configuration for peer connection nodes, allowing multiple entries to support multiple peer connections
|
|
||||||
[[peer]]
|
|
||||||
uri = ""
|
|
||||||
|
|
||||||
[[peer]]
|
|
||||||
uri = ""
|
|
||||||
|
|
||||||
# This is the configuration for subnet proxy nodes, where multiple entries can be configured to support multiple subnets
|
|
||||||
[[proxy_network]]
|
|
||||||
cidr = "10.0.1.0/24"
|
|
||||||
|
|
||||||
[[proxy_network]]
|
|
||||||
cidr = "10.0.2.0/24"
|
|
||||||
|
|
||||||
# wg configuration information
|
|
||||||
[vpn_portal_config]
|
|
||||||
# The subnet where the wg client is located, as shown in the example below.
|
|
||||||
client_cidr = "10.14.14.0/24"
|
|
||||||
# The port that wg listens to (please do not conflict with the listeners' wg).
|
|
||||||
wireguard_listen = "0.0.0.0:11012"
|
|
||||||
|
|
||||||
[flags]
|
|
||||||
# default protocol to use when connecting to peers
|
|
||||||
default_protocol = "tcp"
|
|
||||||
# TUN device name. If left empty, the default name will be used
|
|
||||||
dev_name = ""
|
|
||||||
# enable encryption for peers communication
|
|
||||||
enable_encryption = true
|
|
||||||
# enable IPv6 support
|
|
||||||
enable_ipv6 = true
|
|
||||||
# mtu of the TUN device
|
|
||||||
mtu = 1380
|
|
||||||
# latency priority mode will attempt to forward traffic using the path with the lowest latency. By default, the shortest path is used
|
|
||||||
latency_first = false
|
|
||||||
# configure this node as an exit node
|
|
||||||
enable_exit_node = false
|
|
||||||
# disable TUN device
|
|
||||||
no_tun = false
|
|
||||||
# enable smoltcp stack for subnet proxy
|
|
||||||
use_smoltcp = false
|
|
||||||
# only forward traffic from the whitelist networks, supporting wildcard strings, multiple network names can be separated by spaces. if this parameter is empty, forwarding is disabled. by default, all networks are allowed. e.g.: '*' (all networks), 'def*' (networks with the prefix 'def'), 'net1 net2' (only allow net1 and net2)
|
|
||||||
foreign_network_whitelist = "*"
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -1,93 +1,88 @@
|
|||||||
# Configurations
|
# Complete Configuration Options
|
||||||
|
|
||||||
You can use `easytier-core --help` to view all configuration items
|
You can use `easytier-core --help` to view all configuration options.
|
||||||
|
|
||||||
```sh
|
## Basic Settings
|
||||||
A full meshed p2p networking tool, connecting all your devices in one network with one command.
|
|
||||||
|
|
||||||
Usage: easytier-core [OPTIONS]
|
- **Startup and Version**
|
||||||
|
|
||||||
Options:
|
- `-h, --help`: Print help information.
|
||||||
-c, --config-file <CONFIG_FILE>
|
- `-V, --version`: Print version information.
|
||||||
path to the config file, NOTE: if this is set, all other options will be ignored
|
|
||||||
--network-name <NETWORK_NAME>
|
- **Configuration File**
|
||||||
network name to identify this virtual network [default: default]
|
|
||||||
--network-secret <NETWORK_SECRET>
|
- `-c, --config-file <CONFIG_FILE>`: Path to the configuration file. If this option is set, all other options will be ignored.
|
||||||
network secret to verify this node belongs to the virtual network [default: ]
|
|
||||||
-i, --ipv4 <IPV4>
|
- **Instance Identification**
|
||||||
ipv4 address of this node, if empty, this node will only forward packets and no TUN device will be
|
- `--hostname <HOSTNAME>`: Hostname to identify this device.
|
||||||
created
|
- `-m, --instance-name <INSTANCE_NAME>`: Instance name, default is `default`.
|
||||||
-d, --dhcp
|
|
||||||
automatically determine and set IP address by Easytier, and the
|
## Network Configuration
|
||||||
IP address starts from 10.0.0.1 by default. Warning, if there is an IP
|
|
||||||
conflict in the network when using DHCP, the IP will be automatically
|
- **Server and Network**
|
||||||
changed.
|
|
||||||
-p, --peers [<PEERS>...]
|
- `-w, --config-server <CONFIG_SERVER>`: Configuration server address.
|
||||||
peers to connect initially
|
- `--network-name <NETWORK_NAME>`: Network name, default is `default`.
|
||||||
-e, --external-node <EXTERNAL_NODE>
|
- `--network-secret <NETWORK_SECRET>`: Network secret, default is empty.
|
||||||
use a public shared node to discover peers
|
|
||||||
-n, --proxy-networks <PROXY_NETWORKS>
|
- **IP Configuration**
|
||||||
export local networks to other peers in the virtual network
|
- `-i, --ipv4 <IPV4>`: IPv4 address of this node, empty means only forwarding packets.
|
||||||
-r, --rpc-portal <RPC_PORTAL>
|
- `-d, --dhcp`: Automatically set IP address, default starts from 10.0.0.1.
|
||||||
rpc portal address to listen for management. 0 means random
|
- `--dev-name <DEV_NAME>`: Optional TUN interface name.
|
||||||
port, 12345 means listen on 12345 of localhost, 0.0.0.0:12345 means
|
- `--mtu <MTU>`: MTU of the TUN device, default is 1380 for non-encrypted, 1360 for encrypted.
|
||||||
listen on 12345 of all interfaces. default is 0 and will try 15888 first [default: 0]
|
|
||||||
-l, --listeners [<LISTENERS>...]
|
## Connection Management
|
||||||
listeners to accept connections, allow format:
|
|
||||||
a port number: 11010, means tcp/udp will listen on 11010, ws/wss will listen on 11010 and 11011, wg will
|
- **Listeners and Portals**
|
||||||
listen on 11011
|
|
||||||
url: tcp://0.0.0.0:11010, tcp can be tcp, udp, ring, wg, ws, wss,
|
- `-l, --listeners [<LISTENERS>...]`: Listeners to accept connections.
|
||||||
proto:port: wg:11011, means listen on 11011 with wireguard protocol
|
- `--mapped-listeners [<MAPPED_LISTENERS>...]`: Specify public addresses for listeners.
|
||||||
url and proto:port can occur multiple times.
|
- `--no-listener`: Do not listen on any port.
|
||||||
[default: 11010]
|
- `--vpn-portal <VPN_PORTAL>`: Define the URL of the VPN portal.
|
||||||
--no-listener
|
- `--rpc-portal <RPC_PORTAL>`: Management RPC portal address, default is 15888.
|
||||||
do not listen on any port, only connect to peers
|
|
||||||
--console-log-level <CONSOLE_LOG_LEVEL>
|
- **Nodes and Routing**
|
||||||
console log level [possible values: trace, debug, info, warn, error, off]
|
- `-p, --peers [<PEERS>...]`: Initial peers to connect to.
|
||||||
--file-log-level <FILE_LOG_LEVEL>
|
- `-e, --external-node <EXTERNAL_NODE>`: Use public shared nodes to discover peers.
|
||||||
file log level [possible values: trace, debug, info, warn, error, off]
|
- `--exit-nodes [<EXIT_NODES>...]`: Exit nodes to forward all traffic.
|
||||||
--file-log-dir <FILE_LOG_DIR>
|
- `--enable-exit-node`: Allow this node to become an exit node.
|
||||||
directory to store log files
|
- `--manual-routes [<MANUAL_ROUTES>...]`: Manually assign route CIDR.
|
||||||
--hostname <HOSTNAME>
|
- `--relay-network-whitelist [<RELAY_NETWORK_WHITELIST>...]`: Only forward traffic for whitelisted networks.
|
||||||
host name to identify this device
|
|
||||||
-m, --instance-name <INSTANCE_NAME>
|
## Logging and Debugging
|
||||||
instance name to identify this node in same machine [default: default]
|
|
||||||
--vpn-portal <VPN_PORTAL>
|
- **Log Level**
|
||||||
url that defines the portal, allow other kinds of clients to connect.
|
|
||||||
example: wg://0.0.0.0:11010/10.14.14.0/24, means the portal is a wireguard server listening on
|
- `--console-log-level <CONSOLE_LOG_LEVEL>`: Console log level.
|
||||||
0.0.0.0:11010, and the wireguard client is in network of 10.14.14.0/24
|
- `--file-log-level <FILE_LOG_LEVEL>`: File log level.
|
||||||
--default-protocol <DEFAULT_PROTOCOL>
|
|
||||||
default protocol to use when connecting to peers
|
- **Log Storage**
|
||||||
-u, --disable-encryption
|
- `--file-log-dir <FILE_LOG_DIR>`: Directory to store log files.
|
||||||
disable encryption for peers communication, default is false, must be same with peers
|
|
||||||
--multi-thread
|
## Advanced Features
|
||||||
use multi-thread runtime, default is single-thread
|
|
||||||
--disable-ipv6
|
- **Performance Optimization**
|
||||||
do not use ipv6
|
|
||||||
--dev-name <DEV_NAME>
|
- `--latency-first`: Latency first mode.
|
||||||
optional tun interface name
|
- `--multi-thread`: Run with multi-threading.
|
||||||
--mtu <MTU>
|
- `--disable-udp-hole-punching`: Disable UDP hole punching.
|
||||||
mtu of the TUN device, default is 1420 for non-encryption, 1400 for encryption
|
|
||||||
--latency-first
|
- **Security and Privacy**
|
||||||
latency first mode, will try to relay traffic with lowest latency path, default is using shortest path
|
|
||||||
--exit-nodes [<EXIT_NODES>...]
|
- `-u, --disable-encryption`: Disable encryption, default is false.
|
||||||
exit nodes to forward all traffic to, a virtual ipv4 address, priority is determined by the order of the
|
- `--disable-ipv6`: Do not use IPv6.
|
||||||
list
|
- `--compression <COMPRESSION>`: Compression algorithm to use, default is `none`.
|
||||||
--enable-exit-node
|
|
||||||
allow this node to be an exit node, default is false
|
- **Proxy and Forwarding**
|
||||||
--no-tun
|
|
||||||
do not create TUN device, can use subnet proxy to access node
|
- `--proxy-networks <PROXY_NETWORKS>`: Export local networks to other peers.
|
||||||
--use-smoltcp
|
- `--socks5 <SOCKS5>`: Enable socks5 server.
|
||||||
enable smoltcp stack for subnet proxy
|
- `--ipv6-listener <IPV6_LISTENER>`: IPv6 listener URL.
|
||||||
--manual-routes [<MANUAL_ROUTES>...]
|
- `--no-tun`: Do not create TUN device.
|
||||||
assign routes cidr manually, will disable subnet proxy and
|
- `--use-smoltcp`: Enable smoltcp stack.
|
||||||
wireguard routes propogated from peers. e.g.: 192.168.0.0/16
|
- `--bind-device <BIND_DEVICE>`: Bind socket to physical device.
|
||||||
--relay-network-whitelist [<RELAY_NETWORK_WHITELIST>...]
|
- `--relay-all-peer-rpc`: Forward all peer RPC packets.
|
||||||
only relay traffic of whitelisted networks, input is a wildcard
|
|
||||||
string, e.g.: '*' (all networks), 'def*' (network prefixed with def), can specify multiple networks
|
- **Communication Restrictions**
|
||||||
disable relay if arg is empty. default is allowing all networks
|
- `--disable-p2p`: Disable P2P communication.
|
||||||
-h, --help
|
- `--no-tun`: Do not create TUN device to use subnet proxy to access nodes.
|
||||||
Print help
|
|
||||||
-V, --version
|
|
||||||
Print version
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
# Decentralized Networking
|
||||||
|
|
||||||
|
Most networking software is centralized, where all devices must connect to a central server to form a network.
|
||||||
|
|
||||||
|
EasyTier is decentralized, with no distinction between server and client. As long as one device can communicate with any node in the virtual network, it can join the virtual network.
|
||||||
|
|
||||||
|
## Two-Node Networking
|
||||||
|
|
||||||
|
Assume the network topology of two nodes is as follows:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
subgraph Node A IP 22.1.1.1
|
||||||
|
nodeA[EasyTier<br/>10.144.144.1]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Node B IP 33.1.1.1
|
||||||
|
nodeB[EasyTier</br>10.144.144.2]
|
||||||
|
end
|
||||||
|
|
||||||
|
nodeA <-----> nodeB
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Execute on Node A:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -i 10.144.144.1
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Execute on Node B:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -d -p udp://22.1.1.1:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
Here, `-d` represents DHCP mode, and EasyTier will automatically obtain an IP address.
|
||||||
|
|
||||||
|
## Three-Node Networking
|
||||||
|
|
||||||
|
Based on the previous two-node networking example, the third node C can join the virtual network by connecting to either Node A or Node B.
|
||||||
|
|
||||||
|
Assume it connects to Node A, the network topology is as follows:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
subgraph Node A IP 22.1.1.1
|
||||||
|
nodeA[EasyTier<br/>10.144.144.1]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Node C
|
||||||
|
nodeC[EasyTier<br/>10.144.144.3]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Node B IP 33.1.1.1
|
||||||
|
nodeB[EasyTier</br>10.144.144.2]
|
||||||
|
end
|
||||||
|
|
||||||
|
nodeA <-----> nodeB
|
||||||
|
|
||||||
|
nodeC <-----> nodeA
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute on Node C:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -d -p udp://22.1.1.1:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
Then C can communicate with A and B through the virtual network.
|
||||||
@@ -0,0 +1,178 @@
|
|||||||
|
# Fast Networking
|
||||||
|
|
||||||
|
## Networking with Shared Nodes
|
||||||
|
|
||||||
|
When you don't have a public IP, you can use the free shared nodes provided by the EasyTier community to quickly set up a network. After successfully networking between nodes, NAT traversal will be attempted automatically to establish a P2P connection. Before successful P2P, the shared nodes will help forward data.
|
||||||
|
|
||||||
|
Assume there are two nodes A and B:
|
||||||
|
|
||||||
|
1. Execute on node A (please replace abc with a more complex network name to avoid connection failure due to network name conflict)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -i 10.144.144.1 --network-name abc --network-secret abc -p tcp://public.easytier.cn:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
> `-i` specifies the virtual network IP address, default /24 subnet;
|
||||||
|
>
|
||||||
|
> `--network-name` and `--network-secret` represent the network name and network secret;
|
||||||
|
>
|
||||||
|
> `-p` specifies the node address, here using the official shared node.
|
||||||
|
|
||||||
|
2. Execute on node B
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -d --network-name abc --network-secret abc -p tcp://public.easytier.cn:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
> `-d` represents DHCP mode, EasyTier will automatically obtain an IP address.
|
||||||
|
|
||||||
|
3. Test connectivity
|
||||||
|
|
||||||
|
The two nodes should successfully connect and be able to communicate within the virtual subnet. You can execute the following on node B to test.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ping 10.144.144.1
|
||||||
|
```
|
||||||
|
|
||||||
|
::: warning Note
|
||||||
|
Some systems have firewalls enabled by default, which may block inbound traffic, causing the virtual IP to be unreachable or various services to be inaccessible. You need to manually disable the firewall or add rules.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Check Virtual Network Status
|
||||||
|
|
||||||
|
After starting easytier-core, you can use easytier-cli for management.
|
||||||
|
|
||||||
|
- View node information in the virtual network
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-cli peer
|
||||||
|
```
|
||||||
|
|
||||||
|
| ipv4 | hostname | cost | lat_ms | loss_rate | rx_bytes | tx_bytes | tunnel_proto | nat_type | id |
|
||||||
|
| :----------- | :------- | :--- | :----- | :-------- | :------- | :------- | :----------- | :------- | :-------- |
|
||||||
|
| 10.144.144.1 | abc-dec | 1 | 3.452 | 0 | 17.33kB | 20.42kB | udp | FullCone | 390879727 |
|
||||||
|
|
||||||
|
- View virtual network routing information
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-cli route
|
||||||
|
```
|
||||||
|
|
||||||
|
| ipv4 | hostname | proxy_cidrs | next_hop_ipv4 | next_hop_hostname | next_hop_lat | cost |
|
||||||
|
| :----------- | :------- | :---------- | :------------ | :---------------- | :----------- | :--- |
|
||||||
|
| 10.144.144.1 | abc-dec | | DIRECT | | 3.646 | 1 |
|
||||||
|
|
||||||
|
- View information of the local node
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-cli node
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
┌───────────────┬──────────────────────┐
|
||||||
|
│ Virtual IP │ 10.144.144.1 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Hostname │ archlinux-base │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Proxy CIDRs │ 10.147.223.0/24 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Peer ID │ 2616333191 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Public IP │ 75.52.125.26 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ UDP Stun Type │ FullCone │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 1 │ tcp://0.0.0.0:11010 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 2 │ udp://0.0.0.0:11010 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 3 │ wg://0.0.0.0:11011 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 4 │ ws://0.0.0.0:11011/ │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 5 │ wss://0.0.0.0:11012/ │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 6 │ udp://[::]:37039 │
|
||||||
|
└───────────────┴──────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using Multiple Shared Nodes
|
||||||
|
|
||||||
|
To avoid virtual network unavailability due to a single shared node failure, you can connect to multiple shared nodes simultaneously. Just specify multiple `-p` parameters, such as: `-p tcp://1.1.1.1:11010 -p udp://1.1.1.2:11011`. Each node in the virtual network should specify the same list of public servers.
|
||||||
|
|
||||||
|
This relies on the shared node cluster feature supported by EasyTier. Assume there are two shared nodes A and B, which are interconnected to form a cluster. When C and D want to network, they can connect to both A and B simultaneously. This way, even if A or B fails, C and D can still communicate. The networking mode is shown in the diagram:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
subgraph Node C
|
||||||
|
nodeC[Node C</br>Network Name: abc]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Shared Node A
|
||||||
|
nodeA[Shared Node A</br>Network Name: Public]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Shared Node B
|
||||||
|
nodeB[Shared Node B</br>Network Name: Public]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Node D
|
||||||
|
nodeD[Node D</br>Network Name: abc]
|
||||||
|
end
|
||||||
|
|
||||||
|
nodeA <-----> nodeB
|
||||||
|
|
||||||
|
nodeC <-----> nodeA
|
||||||
|
nodeC <-----> nodeB
|
||||||
|
|
||||||
|
nodeA <-----> nodeD
|
||||||
|
nodeB <-----> nodeD
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Even in the case of network partitioning, where C can only connect to A and D can only connect to B, C and D can still communicate.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
subgraph Node C
|
||||||
|
nodeC[Node C</br>Network Name: abc]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Shared Node A
|
||||||
|
nodeA[Shared Node A</br>Network Name: Public]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Shared Node B
|
||||||
|
nodeB[Shared Node B</br>Network Name: Public]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Node D
|
||||||
|
nodeD[Node D</br>Network Name: abc]
|
||||||
|
end
|
||||||
|
|
||||||
|
nodeA <-----> nodeB
|
||||||
|
|
||||||
|
nodeC <-----> nodeA
|
||||||
|
|
||||||
|
nodeB <-----> nodeD
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Joining Multiple Virtual Networks Simultaneously
|
||||||
|
|
||||||
|
EasyTier supports running multiple processes on the same device, each joining a different virtual network by using different parameters at startup. Note that the virtual IP subnets of multiple virtual networks should not overlap, otherwise routing conflicts will occur.
|
||||||
|
|
||||||
|
Additionally, when running multiple EasyTier instances, different listener ports need to be specified to avoid port conflicts.
|
||||||
|
|
||||||
|
For example, you can start two EasyTier processes with the following commands:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core --network-name net1 -p tcp://public.easytier.cn:11010 -l 11010
|
||||||
|
sudo easytier-core --network-name net2 -p tcp://public.easytier.cn:11010 -l 21010
|
||||||
|
```
|
||||||
|
|
||||||
|
> `-l` specifies the listener port.
|
||||||
@@ -1,27 +1,23 @@
|
|||||||
# Self-Hosted Public Server
|
# Setting Up a Shared Node
|
||||||
|
|
||||||
Users can use their own public IP nodes to host a public server, making it convenient for other users without public IPs to form networks. To start EasyTier as a public server, simply launch `easytier-core` without any parameters (no root permissions required):
|
Users can use their own public nodes to set up a public shared node for networking without a public IP, making it easier for other users without a public IP to network. Simply start EasyTier without any parameters, and the node can be used as a public server (no root privileges required):
|
||||||
|
|
||||||
```
|
```
|
||||||
easytier-core
|
easytier-core
|
||||||
```
|
```
|
||||||
|
|
||||||
EasyTier supports public server clusters. Each virtual network (created using the same network name and key) can function as a public server cluster. Nodes from other networks can connect to any node in the public server cluster and discover each other without the need for a public IP. Running a self-hosted public server cluster is identical to running a virtual network, except you can skip configuring an IPv4 address.
|
Additionally, EasyTier supports shared node clusters. Each virtual network (created with the same network name and key) can act as a shared node cluster, and nodes from other networks can connect to any node in the shared node cluster, discovering each other without a public IP. Running a self-built public server cluster is the same as running a virtual network, but you can skip configuring the IPv4 address.
|
||||||
|
|
||||||
You can also use the following command to join the official public server cluster. In the future, load balancing between nodes in the public server cluster will be implemented:
|
If you wish to contribute a public server to the EasyTier community, you can contact the administrator, and we will inform you how to add your node to the community shared node list. Of course, this requires your node to have a certain level of bandwidth and stability.
|
||||||
|
|
||||||
```
|
|
||||||
sudo easytier-core --network-name easytier --network-secret easytier -p tcp://public.easytier.top:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
## Disable Forwarding
|
## Disable Forwarding
|
||||||
|
|
||||||
By default, every node of EasyTier is capable of providing forwarding services for other virtual networks, even if the node has specified a `--network-name` and `--network-secret` and has joined a virtual network.
|
By default, each EasyTier node allows forwarding services for other virtual networks, even if the node has specified a network name (`--network-name`) and network key (`--network-secret`), and has joined a virtual network.
|
||||||
|
|
||||||
If you wish to change this behavior, you can use the `--relay-network-whitelist` parameter to define a whitelist of network names (a space-separated list of wildcard patterns, e.g., `"ab* abc"`). When the list for this parameter is empty, the node will not provide forwarding services for all other networks.
|
To change this behavior, you can use the `--relay-network-whitelist` parameter to specify a whitelist of network names that can be forwarded (a space-separated list of wildcards, such as `"ab* abc"`). When this parameter's list is empty, it will not provide forwarding services for any other networks.
|
||||||
|
|
||||||
EasyTier can be configured not to forward packets from other virtual networks but instead help establish P2P connections by leaving the whitelist empty and setting it to only forward RPC traffic. The reference command is:
|
EasyTier can avoid forwarding network packets for other virtual networks and only help them establish P2P links by setting the whitelist to empty and configuring it to only forward RPC traffic. The reference command is:
|
||||||
|
|
||||||
```
|
```
|
||||||
easytier-core --relay-network-whitelist --relay-all-peer-rpc
|
easytier-core --relay-network-whitelist --relay-all-peer-rpc
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
# Installing as macOS service
|
# Install as a macOS Service
|
||||||
|
|
||||||
Download and install [serviceman](https://webinstall.dev/serviceman)
|
Download and install [serviceman](https://webinstall.dev/serviceman).
|
||||||
|
|
||||||
Open terminal and run the following commands to register easytier service:
|
Open Terminal and run the following commands to register the service:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Start easytier with configuration file
|
# Register the easytier service using a configuration file
|
||||||
sudo serviceman add -name easytier -system \
|
sudo serviceman add -name easytier -system \
|
||||||
--workdir /var/log/easytier \
|
--workdir /var/log/easytier \
|
||||||
-groupname wheel -username root \
|
-groupname wheel -username root \
|
||||||
-cap-net-bind \
|
-cap-net-bind \
|
||||||
-- easytier-core -c ~/.config/easytier.toml
|
-- easytier-core -c ~/.config/easytier.toml
|
||||||
|
|
||||||
# or you can register easytier service without configuration
|
# Register the easytier service without using a configuration file
|
||||||
sudo serviceman add -name easytier -system \
|
sudo serviceman add -name easytier -system \
|
||||||
--workdir /var/log/easytier \
|
--workdir /var/log/easytier \
|
||||||
-groupname wheel -username root \
|
-groupname wheel -username root \
|
||||||
@@ -20,13 +20,13 @@ sudo serviceman add -name easytier -system \
|
|||||||
-- easytier-core --ipv4 x.x.x.x --network-name xxx --network-secret yyy --peers tcp://peer_host:11010
|
-- easytier-core --ipv4 x.x.x.x --network-name xxx --network-secret yyy --peers tcp://peer_host:11010
|
||||||
```
|
```
|
||||||
|
|
||||||
Start easytier service:
|
Start the easytier service:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo serviceman start easytier
|
sudo serviceman start easytier
|
||||||
```
|
```
|
||||||
|
|
||||||
Stop easytier service:
|
Stop the easytier service:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo serviceman stop easytier
|
sudo serviceman stop easytier
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# Installing as a Linux Systemd Service
|
# Install the Service as a Linux Systemd Service
|
||||||
|
|
||||||
On Linux distributions that support systemd, you can configure the service to start automatically with the system by following these steps:
|
On Linux distributions that support systemd, you can configure the service to start with the system by following these steps:
|
||||||
|
|
||||||
1. Create a new service file at `/etc/systemd/system/easytier.service` and modify the command line parameters after `ExecStart` as needed.
|
1. Create a new service file `/etc/systemd/system/easytier.service` and modify the command line parameters after `ExecStart` as needed.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
[Unit]
|
[Unit]
|
||||||
@@ -31,4 +31,4 @@ systemctl start easytier.service
|
|||||||
systemctl stop easytier.service
|
systemctl stop easytier.service
|
||||||
```
|
```
|
||||||
|
|
||||||
Please note that using the `systemctl` command instead of the `service` command is the more modern approach, and it is recommended to use it on systems that support systemd.
|
Please note that using the `systemctl` command instead of the `service` command is a more modern approach and is recommended on systems that support systemd.
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
# Installing as a Windows Service
|
# Install as a Windows Service
|
||||||
|
|
||||||
1. Go to the NSSM official website [https://nssm.cc/download] to download NSSM and extract it to a local directory.
|
1. Go to the NSSM official website [https://nssm.cc/download] to download NSSM and extract it to a local directory.
|
||||||
2. Download the command-line version of `easytier-core.exe`, remember the installation directory, such as `D:\Software\Easytier\cli\easytier-core.exe`.
|
2. Download the command-line version of easytier-core.exe and remember the storage directory, such as `D:\Software\Easytier\cli\easytier-core.exe`.
|
||||||
3. Register it as a Windows service, naming it `easytier_service`:
|
3. Register it as a Windows service, for example, name it `easytier_service`:
|
||||||
- `nssm.exe install easytier_service D:\Software\Easytier\cli\easytier-core.exe --ipv4 10.144.144.2 --network-name abc --network-secret abc -e tcp://public.easytier.top:11010`
|
- `nssm.exe install easytier_service D:\Software\Easytier\cli\easytier-core.exe --ipv4 10.144.144.2 --network-name abc --network-secret abc -e tcp://public.easytier.top:11010`
|
||||||
4. Run `services.msc`, locate the `easytier_service` service, enable it, and set it to start with a delay.
|
4. Run `services.msc`, find the easytier_service service, enable it and set it to delayed start.
|
||||||
5. To remove the service: `nssm.exe remove easytier_service`.
|
5. To remove the service: `nssm.exe remove easytier_service`
|
||||||
6. Note that after registering as a service, the program (referring to easytier-core.exe) cannot be modified, deleted, or moved. Otherwise, it needs to be removed for re-registration or modifying the Windows registry.
|
6. Note that after registering as a service, the program (referring to easytier-core.exe) cannot be modified, deleted, or moved. Otherwise, you need to delete and re-register or modify the Windows registry.
|
||||||
7. For convenient execution of `easytier-cli.exe` to view connection status, you can place it in `C:\Users\Administrator` (Administrator being your Windows username). Simply open cmd or PowerShell and execute, for example: `easytier-cli.exe peer`.
|
7. To conveniently execute `easytier-cli.exe` to check the connection status, you can store it under `C:\Users\Administrator` (Administrator is your Windows username). You can open cmd or PowerShell at will to execute it, such as: `easytier-cli.exe peer`.
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
# Multi-node Networking
|
|
||||||
|
|
||||||
Based on the two-node networking example just now, if more nodes need to join the virtual network, you can use the following command.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
The `--peers` parameter can fill in the listening address of any node already in the virtual network.
|
|
||||||
|
|
||||||
---
|
|
||||||
@@ -1,45 +1,49 @@
|
|||||||
# Network-to-Network
|
# Network to Network
|
||||||
|
|
||||||
The network topology of network-to-network is shown in the figure below.
|
The network topology of network to network is shown in the figure
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
|
|
||||||
subgraph Node A
|
subgraph Node A
|
||||||
nodeA[EasyTier\n10.144.144.1]
|
nodeA[EasyTier</br>10.144.144.1]
|
||||||
end
|
end
|
||||||
|
|
||||||
subgraph Node B
|
subgraph Node B
|
||||||
nodeB[EasyTier\n10.144.144.2]
|
nodeB[EasyTier</br>10.144.144.2]
|
||||||
end
|
end
|
||||||
|
|
||||||
id1[[10.1.1.0/24]]
|
id1[[10.1.1.0/24]]
|
||||||
|
|
||||||
id2[[192.168.1.0/24]]
|
id2[[192.168.1.0/24]]
|
||||||
|
|
||||||
id2 <-.Subnet proxy.-> nodeA <--> nodeB <-.Subnet proxy.-> id1
|
id2 <-.Subnet Proxy.-> nodeA <--> nodeB <-.Subnet Proxy.-> id1
|
||||||
|
|
||||||
id2 -.No need for EasyTier to access each other's subnet.-> id1
|
id2 -.No EasyTier needed to access the other subnet.-> id1
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
After the network-to-network configuration is successful, devices in the 192.168.1.0/24 subnet can access devices in the 10.1.1.0/24 subnet for mutual communication without installing EasyTier.
|
After the network to network configuration is successful, devices in the 192.168.1.0/24 subnet can communicate with devices in the 10.1.1.0/24 subnet without installing EasyTier.
|
||||||
|
|
||||||
To achieve network-to-network, Node A needs to be the gateway of the 192.168.1.0/24 subnet. The startup and configuration parameters for the two EasyTier nodes are as follows:
|
## Linux Network to Network Configuration
|
||||||
|
|
||||||
|
To achieve network to network, Node A needs to be the gateway for the 192.168.1.0/24 subnet. The startup and configuration parameters for the two EasyTier nodes are as follows:
|
||||||
|
|
||||||
Node A
|
Node A
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Start EasyTier and proxy the 192.168.1.0/24 subnet, and use a public server to help network
|
# Start EasyTier and proxy the 192.168.1.0/24 subnet, using a public server to help network
|
||||||
easytier-core -i 10.144.144.1 -n 192.168.1.0/24 -p tcp://public.easytier.top:11010 --network-name n2n_test
|
easytier-core -i 10.144.144.1 -n 192.168.1.0/24 -p tcp://public.easytier.top:11010 --network-name n2n_test
|
||||||
|
|
||||||
# Allow the gateway to forward traffic and configure the firewall to allow forwarding traffic
|
# Allow the gateway to forward traffic and configure the firewall to allow traffic forwarding
|
||||||
sysctl -w net.ipv4.ip_forward=1
|
sysctl -w net.ipv4.ip_forward=1
|
||||||
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
|
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
|
||||||
iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT
|
iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT
|
||||||
```
|
```
|
||||||
|
|
||||||
Node B
|
Node B
|
||||||
```bash
|
|
||||||
# Start EasyTier and proxy the 10.1.1.0/24 subnet, and use a public server to help network
|
```bash
|
||||||
easytier-core -i 10.144.144.2 -n 10.1.1.0/24 -p tcp://public.easytier.top:11010 --network-name n2n_test $
|
# Start EasyTier and proxy the 10.1.1.0/24 subnet, using a public server to help network
|
||||||
```
|
easytier-core -i 10.144.144.2 -n 10.1.1.0/24 -p tcp://public.easytier.top:11010 --network-name n2n_test
|
||||||
|
```
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
# Networking without Public IP
|
|
||||||
|
|
||||||
EasyTier supports networking using shared public nodes. The currently deployed shared public node is
|
|
||||||
|
|
||||||
`tcp://public.easytier.top:11010`
|
|
||||||
|
|
||||||
When using shared nodes, each node entering the network needs to provide the same `--network-name` and `--network-secret` parameters as the unique identifier of the network.
|
|
||||||
|
|
||||||
Taking two nodes as an example, Node A executes:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo easytier-core -i 10.144.144.1 --network-name abc --network-secret abc -p tcp://public.easytier.top:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
Node B executes
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo easytier-core --ipv4 10.144.144.2 --network-name abc --network-secret abc -p tcp://public.easytier.top:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
After the command is successfully executed, Node A can access Node B through the virtual IP 10.144.144.2.
|
|
||||||
|
|
||||||
`--ipv4 x.x.x.x` can be replaced with `-d` to enable the DHCP function, allowing EasyTier to automatically assign the node's IP address based on other existing virtual IPs within the virtual network.
|
|
||||||
|
|
||||||
Nodes can connect to multiple public servers, and even if one public server fails, nodes can still communicate using other active public servers. Simply specify multiple `-p` parameters, such as: `-p tcp://1.1.1.1:11010 -p udp://1.1.1.2:11011`. It is important to note that each node in the virtual network must specify the same list of public servers; otherwise, proper networking may not be achieved.
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# No TUN Mode (No Root Permission Required)
|
# No TUN Mode (No Root Permission Required)
|
||||||
|
|
||||||
Since creating a TUN device requires ROOT permission, EasyTier also provides a method of use that does not depend on TUN for environments where ROOT permission cannot be obtained. Simply add the `--no-tun` parameter when starting EasyTier.
|
Since creating a TUN device requires ROOT permissions, EasyTier provides a method that does not rely on TUN for environments where Root permissions cannot be obtained. Simply add the `--no-tun` parameter when starting EasyTier.
|
||||||
|
|
||||||
When networking in No TUN mode, nodes can be accessed via virtual IPs (supporting TCP, UDP, and ICMP), and can also act as subnet proxies (using the -n parameter). However, they cannot initiate visits to other nodes.
|
When using the no TUN mode for networking, nodes can be accessed via virtual IP (TCP, UDP, and ICMP are all supported), and can also act as subnet proxies (using the -n parameter). However, they cannot actively initiate access to other nodes.
|
||||||
|
|
||||||
To actively access other nodes in No TUN mode, you can use EasyTier's [SOCKS5 server functionality](/en/guide/network/socks5).
|
To actively access other nodes in no TUN mode, you can use EasyTier's [SOCKS5 server feature](/guide/network/socks5).
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# P2P Optimization
|
||||||
|
|
||||||
|
If you want EasyTier to establish P2P connections with other nodes more easily, you can optimize it in the following ways.
|
||||||
|
|
||||||
|
## IPv6
|
||||||
|
|
||||||
|
EasyTier supports P2P communication between nodes via IPv6. By default, EasyTier will randomly listen on an IPv6 UDP port.
|
||||||
|
|
||||||
|
In some cases, specifying the listening IPv6 address and port may be more beneficial for P2P communication between nodes.
|
||||||
|
You can use the `-l` option to configure the IPv6 listener. For example:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-core -l 'tcp://[::]:12345' -l 'udp://[::]:12345'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Specify Public IP and Port
|
||||||
|
|
||||||
|
In some cases, the node has a public IP and port, but EasyTier cannot correctly identify them (e.g., NAT host). You can use the `--mapped_listeners` option to configure the public IP and port. For example:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-core --mapped_listeners tcp://8.8.8.8:12345 -l tcp://0.0.0.0:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
This EasyTier instance listens on the local 11010 TCP port, and this port is mapped to the public 12345 port. Other nodes will try to connect to the public 12345 port.
|
||||||
|
|
||||||
|
## Disable Internet Assistance Tools
|
||||||
|
|
||||||
|
Some internet assistance tools may affect the results of STUN tests, causing EasyTier to fail to identify the NAT type or to identify the wrong public IP and port. You can try disabling these tools.
|
||||||
@@ -1,33 +1,33 @@
|
|||||||
# Subnet Proxy (Point-to-Network)
|
# Subnet Proxy (Point-to-Network)
|
||||||
|
|
||||||
Assuming the network topology is as follows, Node B wants to share its accessible subnet 10.1.1.0/24 with other nodes.
|
Assume the network topology is as follows, and node B wants to share its accessible subnet 10.1.1.0/24 with other nodes.
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
|
|
||||||
subgraph Node A IP 22.1.1.1
|
subgraph Node A IP 22.1.1.1
|
||||||
nodea[EasyTier\n10.144.144.1]
|
nodeA[EasyTier</br>10.144.144.1]
|
||||||
end
|
end
|
||||||
|
|
||||||
subgraph Node B
|
subgraph Node B
|
||||||
nodeb[EasyTier\n10.144.144.2]
|
nodeB[EasyTier</br>10.144.144.2]
|
||||||
end
|
end
|
||||||
|
|
||||||
id1[[10.1.1.0/24]]
|
id1[[10.1.1.0/24]]
|
||||||
|
|
||||||
nodea <--> nodeb <-.-> id1
|
nodeA <--> nodeB <-.-> id1
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Then the startup parameters for Node B's easytier are (new -n parameter)
|
The startup parameters for node B's easytier are as follows (add the -n parameter)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24
|
sudo easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24
|
||||||
```
|
```
|
||||||
|
|
||||||
Subnet proxy information will automatically sync to each node in the virtual network, and each node will automatically configure the corresponding route. Node A can check whether the subnet proxy is effective through the following command.
|
The subnet proxy information will be automatically synchronized to each node in the virtual network, and each node will automatically configure the corresponding routes. Node A can check if the subnet proxy is effective with the following command.
|
||||||
|
|
||||||
1. Check whether the routing information has been synchronized, the proxy_cidrs column shows the proxied subnets.
|
1. Check if the routing information has been synchronized. The proxy_cidrs column shows the proxied subnets.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
easytier-cli route
|
easytier-cli route
|
||||||
@@ -37,24 +37,41 @@ Subnet proxy information will automatically sync to each node in the virtual net
|
|||||||
| :----------- | :------- | :---------- | :------------ | :---------------- | :----------- | :--- |
|
| :----------- | :------- | :---------- | :------------ | :---------------- | :----------- | :--- |
|
||||||
| 10.144.144.1 | abc-dec | 10.1.1.0/24 | DIRECT | | 3.25 | 1 |
|
| 10.144.144.1 | abc-dec | 10.1.1.0/24 | DIRECT | | 3.25 | 1 |
|
||||||
|
|
||||||
2. Test whether Node A can access nodes under the proxied subnet
|
2. Test if node A can access the nodes under the proxied subnet
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ping 10.1.1.2
|
ping 10.1.1.2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
::: warning Note
|
||||||
|
The -n parameter for subnet proxy can be specified multiple times to proxy multiple subnets; you can also set the mask to 32 to proxy a single IP address.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-core -n 10.1.1.0/24 -n 10.2.0.0/16 -n 10.3.3.3/32
|
||||||
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
## Manually Specifying Routes
|
## Manually Specifying Routes
|
||||||
|
|
||||||
By default, when a node in the virtual network is configured with a subnet proxy, the subnet proxy's segment is synchronized to all nodes within the virtual network, and a route is automatically generated to handle packets destined for these segments via the virtual network.
|
By default, when a node in the virtual network configures a subnet proxy, the subnet proxy segment will be synchronized to all nodes in the virtual network, and a route will be automatically generated to forward packets destined for these segments to the virtual network.
|
||||||
|
|
||||||
This simplifies networking in most cases, but in some scenarios, users may not want EasyTier to automatically configure routes on the node. Users can manually configure the traffic that needs to be forwarded to the virtual network using the `--manual-routes` parameter.
|
This can simplify networking in most cases, but in some scenarios, users may not want EasyTier to automatically configure routes on the nodes. Users can manually configure the traffic to be forwarded to the virtual network using the `--manual-routes` parameter.
|
||||||
|
|
||||||
After using `--manual-routes`, only the segments configured with this parameter will enter the virtual network. If the list after this parameter is empty, EasyTier will not process any traffic for non-virtual network segments.
|
When using `--manual-routes`, only the segments configured with this parameter will enter the virtual network. If the list after this parameter is empty, EasyTier will not handle any traffic for non-virtual network segments.
|
||||||
|
|
||||||
## Firewall
|
## Firewall
|
||||||
|
|
||||||
Since proxy traffic requires the use of the system's network stack, the subnet proxy needs to disable the firewall on the virtual network card (this applies to both Linux and Windows).
|
Since proxy traffic needs to use the system's network stack, the subnet proxy requires the firewall on the virtual network card to be disabled (this applies to both Linux and Windows).
|
||||||
|
|
||||||
If it is not possible to disable the firewall, you can try using the user-space network stack for the subnet proxy, which can eliminate the need to configure the firewall. Simply add the `--use-smoltcp` parameter when starting EasyTier.
|
If disabling the firewall is not possible, you can try using a user-space network stack for the subnet proxy, which can avoid the need to configure the firewall. Simply add the `--use-smoltcp` parameter when starting EasyTier.
|
||||||
|
|
||||||
|
::: warning Note
|
||||||
|
|
||||||
|
The user-space protocol stack will be inferior to the kernel protocol stack in terms of performance, congestion control, etc.
|
||||||
|
|
||||||
|
Currently, the `--use-smoltcp` parameter only affects the TCP protocol. UDP and ICMP will use the user-space protocol stack regardless of whether this parameter is used.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# SOCKS5
|
# SOCKS5
|
||||||
|
|
||||||
EasyTier supports the creation of a SOCKS5 server, allowing other programs on the node to access the virtual network and other proxy subnets within the virtual network by setting their proxy to the EasyTier SOCKS5 service.
|
EasyTier supports creating SOCKS5 servers. Other programs on the node can access the virtual network and other proxy subnets within the virtual network by setting the proxy to EasyTier's SOCKS5 service.
|
||||||
|
|
||||||
The parameter to start the SOCKS5 service is `--socks5 12333`. By adding this parameter to the easytier-core startup command, the local port 12333 can serve SOCKS5 clients. Currently, the SOCKS5 server does not require username and password authentication and can be used directly.
|
The parameter to enable the SOCKS5 service is `--socks5 12333`. Adding this parameter to the easytier-core startup command will allow the local 12333 port to serve SOCKS5 clients. Currently, the SOCKS5 server does not require username and password authentication and can be used directly.
|
||||||
|
|||||||
@@ -1,127 +0,0 @@
|
|||||||
# Two-node Networking
|
|
||||||
|
|
||||||
Assuming the network topology of the two nodes is as follows
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart LR
|
|
||||||
|
|
||||||
subgraph Node A IP 22.1.1.1
|
|
||||||
nodea[EasyTier\n10.144.144.1]
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph Node B
|
|
||||||
nodeb[EasyTier\n10.144.144.2]
|
|
||||||
end
|
|
||||||
|
|
||||||
nodea <-----> nodeb
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
1. Execute on Node A:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo easytier-core --ipv4 10.144.144.1
|
|
||||||
```
|
|
||||||
|
|
||||||
Successful execution of the command will print the following.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ easytier-core --ipv4 10.144.144.1
|
|
||||||
Starting easytier with config:
|
|
||||||
############### TOML ##############
|
|
||||||
|
|
||||||
instance_name = "default"
|
|
||||||
instance_id = "7294d13c-d119-49ae-a5f7-8c3a912538d7"
|
|
||||||
ipv4 = "10.144.144.1"
|
|
||||||
listeners = [
|
|
||||||
"tcp://0.0.0.0:11010",
|
|
||||||
"udp://0.0.0.0:11010",
|
|
||||||
"wg://0.0.0.0:11011",
|
|
||||||
]
|
|
||||||
peer = []
|
|
||||||
rpc_portal = "127.0.0.1:15888"
|
|
||||||
|
|
||||||
[network_identity]
|
|
||||||
network_name = "default"
|
|
||||||
network_secret = ""
|
|
||||||
|
|
||||||
[flags]
|
|
||||||
default_protocol = "tcp"
|
|
||||||
enable_encryption = true
|
|
||||||
enable_ipv6 = true
|
|
||||||
|
|
||||||
-----------------------------------
|
|
||||||
xxxx-xx-xx xx:xx:xx: tun device ready. dev: tun0
|
|
||||||
xxxx-xx-xx xx:xx:xx: new listener added. listener: tcp://0.0.0.0:11010
|
|
||||||
xxxx-xx-xx xx:xx:xx: new listener added. listener: udp://0.0.0.0:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Execute on Node B
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Test Connectivity
|
|
||||||
|
|
||||||
The two nodes should connect successfully and be able to communicate within the virtual subnet
|
|
||||||
|
|
||||||
```sh
|
|
||||||
ping 10.144.144.2
|
|
||||||
```
|
|
||||||
|
|
||||||
Use easytier-cli to view node information in the subnet
|
|
||||||
|
|
||||||
```sh
|
|
||||||
easytier-cli peer
|
|
||||||
```
|
|
||||||
|
|
||||||
| ipv4 | hostname | cost | lat_ms | loss_rate | rx_bytes | tx_bytes | tunnel_proto | nat_type | id |
|
|
||||||
| :----------- | :------- | :--- | :----- | :-------- | :------- | :------- | :----------- | :------- | :-------- |
|
|
||||||
| 10.144.144.1 | abc-dec | 1 | 3.452 | 0 | 17.33kB | 20.42kB | udp | FullCone | 390879727 |
|
|
||||||
|
|
||||||
Use easytier-cli to view routing information in the subnet
|
|
||||||
|
|
||||||
```sh
|
|
||||||
easytier-cli route
|
|
||||||
```
|
|
||||||
|
|
||||||
| ipv4 | hostname | proxy_cidrs | next_hop_ipv4 | next_hop_hostname | next_hop_lat | cost |
|
|
||||||
| :----------- | :------- | :---------- | :------------ | :---------------- | :----------- | :--- |
|
|
||||||
| 10.144.144.1 | abc-dec | | DIRECT | | 3.646 | 1 |
|
|
||||||
|
|
||||||
Use easytier-cli to view local node info.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
easytier-cli node
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
┌───────────────┬──────────────────────┐
|
|
||||||
│ Virtual IP │ 10.144.144.1 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Hostname │ archlinux-base │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Proxy CIDRs │ 10.147.223.0/24 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Peer ID │ 2616333191 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Public IP │ 75.52.125.26 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ UDP Stun Type │ FullCone │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 1 │ tcp://0.0.0.0:11010 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 2 │ udp://0.0.0.0:11010 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 3 │ wg://0.0.0.0:11011 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 4 │ ws://0.0.0.0:11011/ │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 5 │ wss://0.0.0.0:11012/ │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 6 │ udp://[::]:37039 │
|
|
||||||
└───────────────┴──────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
# Use EasyTier with WireGuard Client
|
# Connect Using WireGuard Client
|
||||||
|
|
||||||
EasyTier can be used as a WireGuard server to allow any device with WireGuard client installed to access the EasyTier network. For platforms currently unsupported by EasyTier (such as iOS), this method can be used to connect to the EasyTier network.
|
EasyTier can be used as a WireGuard server, allowing any device with a WireGuard client installed to access the EasyTier network. For platforms currently not supported by EasyTier (such as iOS), this method can be used to connect to the EasyTier network.
|
||||||
|
|
||||||
Assuming the network topology is as follows:
|
Assume the network topology is as follows:
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
|
|
||||||
ios[[iPhone \n WireGuard Installed]]
|
ios[[iPhone \n with WireGuard installed]]
|
||||||
|
|
||||||
subgraph Node A IP 22.1.1.1
|
subgraph Node A IP 22.1.1.1
|
||||||
nodea[EasyTier\n10.144.144.1]
|
nodea[EasyTier\n10.144.144.1]
|
||||||
@@ -22,16 +22,16 @@ id1[[10.1.1.0/24]]
|
|||||||
ios <-.-> nodea <--> nodeb <-.-> id1
|
ios <-.-> nodea <--> nodeb <-.-> id1
|
||||||
```
|
```
|
||||||
|
|
||||||
To enable an iPhone to access the EasyTier network through Node A, the following configuration can be applied:
|
We need the iPhone to access the EasyTier network through Node A, and the configuration can be as follows:
|
||||||
|
|
||||||
Include the --vpn-portal parameter in the easytier-core command on Node A to specify the port that the WireGuard service listens on and the subnet used by the WireGuard network.
|
In the easytier-core command on Node A, add the --vpn-portal parameter to specify the port WireGuard listens on and the subnet used by the WireGuard network.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# The following parameters mean: listen on port 0.0.0.0:11013, and use the 10.14.14.0/24 subnet for WireGuard
|
# The following parameters mean: listen on port 11013 on 0.0.0.0, WireGuard uses the 10.14.14.0/24 subnet
|
||||||
sudo easytier-core --ipv4 10.144.144.1 --vpn-portal wg://0.0.0.0:11013/10.14.14.0/24
|
sudo easytier-core --ipv4 10.144.144.1 --vpn-portal wg://0.0.0.0:11013/10.14.14.0/24
|
||||||
```
|
```
|
||||||
|
|
||||||
After successfully starting easytier-core, use easytier-cli to obtain the WireGuard client configuration.
|
After easytier-core starts successfully, use easytier-cli to get the WireGuard Client configuration.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$> easytier-cli vpn-portal
|
$> easytier-cli vpn-portal
|
||||||
@@ -52,4 +52,6 @@ connected_clients:
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Before using the Client Config, you need to modify the Interface Address and Peer Endpoint to the client's IP and the IP of the EasyTier node, respectively. Import the configuration file into the WireGuard client to access the EasyTier network.
|
Before using the Client Config, you need to modify the Interface Address and Peer Endpoint to the client's IP and the EasyTier node's IP, respectively. Import the configuration file into the WireGuard client to access the EasyTier network.
|
||||||
|
|
||||||
|
---
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# Using the Web Console
|
||||||
|
|
||||||
|
EasyTier supports using the [Web Console](https://easytier.cn/web#/) to manage EasyTier nodes, including viewing node status, configuring node parameters, viewing node logs, and more.
|
||||||
|
|
||||||
|
## Register an Account
|
||||||
|
|
||||||
|
To use the Web Console for the first time, you need to register an account. [Registration link](https://easytier.cn/web#/auth/register).
|
||||||
|
|
||||||
|
## Running EasyTier Node
|
||||||
|
|
||||||
|
If you want the EasyTier node to be managed by the Web Console, you need to specify the `--config-server` or `-w` parameter when starting, for example:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
./easytier-core -w <your username>
|
||||||
|
```
|
||||||
|
|
||||||
|
> Please replace `<your username>` with the username you registered on the Web Console.
|
||||||
|
|
||||||
|
If the terminal shows messages like "Connection successful" or "Connected to server", it means Easytier Core has successfully connected to the Web Console server.
|
||||||
|
|
||||||
|
::: danger Note
|
||||||
|
Only one EasyTier process on a machine can be managed by the Web Console. Having multiple processes may cause unexpected issues.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Using the Web Console
|
||||||
|
|
||||||
|
Log in to the [Web Console](https://easytier.cn/web#/) using the username and password you just registered. After logging in successfully, you will see the node list.
|
||||||
|
|
||||||
|
Select the device you need to configure on the webpage.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
After opening the device, click the green connect button.
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
The subsequent configuration steps are the same as configuring a program with a GUI.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# Networking
|
# Networking
|
||||||
|
|
||||||
::: warning tips
|
::: warning Note
|
||||||
The following text only describes the use of the command-line tool; the GUI program can be configured by referring to the following concepts.
|
The following only describes the use of command-line tools. For graphical interface programs, you can refer to the concepts below for configuration, or refer to [Graphical Interface GUI Networking](/guide/gui/index).
|
||||||
:::
|
:::
|
||||||
|
|
||||||
Make sure EasyTier is installed according to the [Installation Guide](/en/guide/installation), and both easytier-core and easytier-cli commands are available.
|
Make sure you have installed EasyTier according to the [Installation Guide](/guide/installation), and that both the easytier-core and easytier-cli commands are available.
|
||||||
|
|||||||
@@ -0,0 +1,149 @@
|
|||||||
|
# Performance Testing
|
||||||
|
|
||||||
|
Software and versions involved in the test (to avoid bias and for fair treatment, use "X" as a placeholder):
|
||||||
|
|
||||||
|
| Software | Version | Link |
|
||||||
|
| ----------------- | ----------------- | ------------------------------------ |
|
||||||
|
| EasyTier | 1.2.1 | https://github.com/EasyTier/EasyTier |
|
||||||
|
| Networking Tool A | July 2024 Version | |
|
||||||
|
|
||||||
|
To be tested:
|
||||||
|
|
||||||
|
- WireGuard
|
||||||
|
- TailScale
|
||||||
|
- ZeroTier
|
||||||
|
|
||||||
|
## X86
|
||||||
|
|
||||||
|
| | |
|
||||||
|
| ------------- | -------------------------------------------- |
|
||||||
|
| Machine Model | Alibaba Cloud ecs.ic5.2xlarge |
|
||||||
|
| vCPU | 8 vCPU |
|
||||||
|
| RAM | 8G |
|
||||||
|
| CPU Model | Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz |
|
||||||
|
| OS | Ubuntu 22.04 64-bit |
|
||||||
|
|
||||||
|
## Test Results
|
||||||
|
|
||||||
|
| Software | Test Item | Performance ( No -R / With -R ) Gbit/s |
|
||||||
|
| :---------------: | :---------------: | :------------------------------------: |
|
||||||
|
| LoopBack Device | | 28.3 / 28.3 |
|
||||||
|
| EasyTier | UDP No Encryption | 1.43 / 1.46 |
|
||||||
|
| EasyTier | UDP AES-128-GCM | 1.36 / 1.37 |
|
||||||
|
| EasyTier | TCP No Encryption | 1.31 / 1.41 |
|
||||||
|
| EasyTier | TCP AES-128-GCM | 1.42 / 1.41 |
|
||||||
|
| | | |
|
||||||
|
| Networking Tool A | UDP No Encryption | 1.10 / 1.11 |
|
||||||
|
| Networking Tool A | UDP AES-128-GCM | 0.93 / 0.98 |
|
||||||
|
|
||||||
|
## Reproduction Method
|
||||||
|
|
||||||
|
### Basic Preparation
|
||||||
|
|
||||||
|
The test is based on Linux network namespace functionality and can be performed using Ubuntu virtual machines, physical machines, Docker containers, etc.
|
||||||
|
|
||||||
|
Initialization commands (execute with root privileges)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt update
|
||||||
|
apt install iperf3 iptables -y
|
||||||
|
|
||||||
|
ip netns add red
|
||||||
|
ip netns add green
|
||||||
|
ip link add br0 type bridge
|
||||||
|
ip link set br0 up
|
||||||
|
ip addr add 192.168.0.1/16 dev br0
|
||||||
|
|
||||||
|
ip link add vethcab0 type veth peer name red0
|
||||||
|
ip link set vethcab0 master br0
|
||||||
|
ip link set red0 netns red
|
||||||
|
ip netns exec red ip link set lo up
|
||||||
|
ip netns exec red ip link set red0 up
|
||||||
|
ip netns exec red ip addr add 192.168.0.2/16 dev red0
|
||||||
|
ip netns exec red ip route add default via 192.168.0.1
|
||||||
|
ip link set vethcab0 up
|
||||||
|
|
||||||
|
ip link add vethcab1 type veth peer name green0
|
||||||
|
ip link set vethcab1 master br0
|
||||||
|
ip link set green0 netns green
|
||||||
|
ip netns exec green ip link set lo up
|
||||||
|
ip netns exec green ip link set green0 up
|
||||||
|
ip netns exec green ip addr add 192.168.0.3/16 dev green0
|
||||||
|
ip netns exec green ip route add default via 192.168.0.1
|
||||||
|
ip link set vethcab1 up
|
||||||
|
|
||||||
|
sysctl net.ipv4.ip_forward=1
|
||||||
|
sysctl net.bridge.bridge-nf-call-iptables=0
|
||||||
|
sysctl net.bridge.bridge-nf-call-ip6tables=0
|
||||||
|
sysctl net.ipv6.conf.lo.disable_ipv6=0
|
||||||
|
|
||||||
|
# Note: EasyTier does not rely on public network services, so iptables forwarding can be omitted
|
||||||
|
iptables -t nat -A POSTROUTING -j MASQUERADE
|
||||||
|
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
|
||||||
|
iptables -A FORWARD -i eht0 -j ACCEPT
|
||||||
|
iptables --policy FORWARD ACCEPT
|
||||||
|
|
||||||
|
nohup ip netns exec red iperf3 -s &
|
||||||
|
```
|
||||||
|
|
||||||
|
Additionally, ensure that the programs to be tested are in the PATH environment variable.
|
||||||
|
|
||||||
|
The following iperf3 command does not include -R; in actual tests, data with -R will be measured.
|
||||||
|
|
||||||
|
### LoopBack
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip netns exec green iperf3 -c 192.168.0.2
|
||||||
|
```
|
||||||
|
|
||||||
|
### EasyTier
|
||||||
|
|
||||||
|
#### UDP No Encryption:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip netns exec red easytier-core -i 10.126.126.2 --multi-thread -u
|
||||||
|
ip netns exec green easytier-core -i 10.126.126.3 -p udp://192.168.0.2:11010 --multi-thread -u
|
||||||
|
ip netns exec green iperf3 -c 10.126.126.2
|
||||||
|
```
|
||||||
|
|
||||||
|
#### UDP Encryption:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip netns exec red easytier-core -i 10.126.126.2 --multi-thread
|
||||||
|
ip netns exec green easytier-core -i 10.126.126.3 -p udp://192.168.0.2:11010 --multi-thread
|
||||||
|
ip netns exec green iperf3 -c 10.126.126.2
|
||||||
|
```
|
||||||
|
|
||||||
|
#### TCP No Encryption
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip netns exec red easytier-core -i 10.126.126.2 --multi-thread -u
|
||||||
|
ip netns exec green easytier-core -i 10.126.126.3 -p tcp://192.168.0.2:11010 --multi-thread -u
|
||||||
|
ip netns exec green iperf3 -c 10.126.126.2
|
||||||
|
```
|
||||||
|
|
||||||
|
#### TCP Encryption
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip netns exec red easytier-core -i 10.126.126.2 --multi-thread
|
||||||
|
ip netns exec green easytier-core -i 10.126.126.3 -p tcp://192.168.0.2:11010 --multi-thread
|
||||||
|
ip netns exec green iperf3 -c 10.126.126.2
|
||||||
|
```
|
||||||
|
|
||||||
|
### Networking Tool A
|
||||||
|
|
||||||
|
#### UDP No Encryption
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip netns exec red xxx -k iperf -s 8.134.146.7:29872 --ip 10.26.0.2
|
||||||
|
ip netns exec green xxx -k iperf -s 8.134.146.7:29872 --ip 10.26.0.3
|
||||||
|
ip netns exec green iperf3 -c 10.26.0.2
|
||||||
|
```
|
||||||
|
|
||||||
|
#### UDP Encryption
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip netns exec red xxx -k iperf -s 8.134.146.7:29872 -w 1234 --ip 10.26.0.2
|
||||||
|
ip netns exec green xxx -k iperf -s 8.134.146.7:29872 -w 1234 --ip 10.26.0.3
|
||||||
|
ip netns exec green iperf3 -c 10.26.0.2
|
||||||
|
```
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# Roadmap
|
# Roadmap
|
||||||
|
|
||||||
- [ ] Improve documentation and user guides.
|
- [ ] Support for optimizing P2P transmission using KCP / FEC.
|
||||||
- [ ] Support features such as encryption, TCP hole punching,etc.
|
- [ ] Support for UPnP.
|
||||||
- [ ] Support IOS.
|
- [ ] Support for IOS.
|
||||||
- [ ] Support Web configuration management.
|
- [ ] Support for TCP hole punching.
|
||||||
|
- [x] Support for Web configuration management.
|
||||||
|
- [x] Improve documentation and user guides.
|
||||||
|
|||||||
@@ -4,43 +4,75 @@ layout: home
|
|||||||
|
|
||||||
hero:
|
hero:
|
||||||
name: EasyTier
|
name: EasyTier
|
||||||
text: implemented using Rust language and Tokio framework
|
text: Powered by Rust and Tokio
|
||||||
tagline: A simple, secure, decentralized SD-WAN mesh networking solution
|
tagline: ✨ A simple, secure, decentralized networking solution
|
||||||
|
image:
|
||||||
|
light: '/gui-config-light.png'
|
||||||
|
dark: '/gui-config-dark.png'
|
||||||
|
alt: 'Easytier GUI configuration interface'
|
||||||
actions:
|
actions:
|
||||||
- theme: brand
|
- theme: brand
|
||||||
text: Quick start
|
text: Get Started
|
||||||
link: /en/guide/introduction
|
link: /en/guide/installation
|
||||||
- theme: alt
|
- theme: alt
|
||||||
text: Github
|
text: Download
|
||||||
link: https://github.com/EasyTier/EasyTier
|
link: /en/guide/download
|
||||||
- theme: alt
|
- theme: alt
|
||||||
text: Enhance documents
|
text: Web Console
|
||||||
link: https://github.com/EasyTier/easytier.github.io/compare
|
link: https://easytier.cn/web
|
||||||
- theme: alt
|
- theme: sponsor
|
||||||
text: Contribute
|
text: 💚 Sponsor
|
||||||
link: https://github.com/EasyTier/EasyTier/issues
|
link: /#sponsor
|
||||||
|
|
||||||
features:
|
features:
|
||||||
- title: Decentralized
|
- title: Decentralized
|
||||||
details: No need to rely on centralized services, nodes are equal and independent.
|
details: No distinction between client/server, no reliance on centralized services, nodes are equal and independent.
|
||||||
- title: Safe
|
link: /en/guide/network/decentralized-networking
|
||||||
details: Use WireGuard protocol to encrypt data.
|
- title: Easy to Use
|
||||||
|
details: |
|
||||||
|
Supports multiple usage methods via web, client, or command line, simple operation.
|
||||||
|
</br>
|
||||||
|
Supports one-click networking using shared nodes.
|
||||||
|
link: /en/guide/network/web-console
|
||||||
|
- title: Cross-Platform
|
||||||
|
details: |
|
||||||
|
Supports Windows, MacOS, Linux, FreeBSD, Android, etc.
|
||||||
|
</br>
|
||||||
|
Supports X86, ARM, MIPS, etc. hardware architectures.
|
||||||
|
link: /en/guide/download
|
||||||
|
- title: Secure
|
||||||
|
details: Supports AES-GCM or WireGuard encryption to protect transit traffic from man-in-the-middle attacks.
|
||||||
|
link: /
|
||||||
|
- title: Efficient NAT Traversal
|
||||||
|
details: Supports UDP-based NAT traversal and IPV6 traversal, in some cases can penetrate NAT4-NAT4 networks.
|
||||||
|
link: /
|
||||||
|
- title: Subnet Proxy
|
||||||
|
details: Nodes can forward accessible subnets to the virtual network, allowing other nodes to access these subnets through the node.
|
||||||
|
link: /en/guide/network/point-to-networking
|
||||||
|
- title: Intelligent Routing
|
||||||
|
details: Supports latency-priority mode, automatically selects the optimal path, providing the best network experience.
|
||||||
|
link: /en/guide/network/configurations
|
||||||
- title: High Performance
|
- title: High Performance
|
||||||
details: Full-link zero-copy, with performance comparable to mainstream networking software.
|
details: Zero-copy throughout the entire link, performance comparable to mainstream networking software.</br> Communication between nodes supports multiple protocols such as TCP, UDP, QUIC, WG, etc.
|
||||||
- title: Cross-platform
|
link: /en/guide/perf
|
||||||
details: Supports MacOS/Linux/Windows/FreeBSD/Android, will support IOS in the future. The executable file is statically linked, making deployment simple.
|
|
||||||
- title: Networking without public IP
|
|
||||||
details: Supports networking using shared public nodes, refer to Configuration Guide
|
|
||||||
- title: NAT traversal
|
|
||||||
details: Supports UDP-based NAT traversal, able to establish stable connections even in complex network environments.
|
|
||||||
- title: Subnet Proxy (Point-to-Network)
|
|
||||||
details: Nodes can expose accessible network segments as proxies to the virtual network, allowing other nodes to access these subnets through the node.
|
|
||||||
- title: Smart Routing
|
|
||||||
details: Selects links based on traffic to reduce latency and increase throughput.
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Links
|
## Related Links
|
||||||
|
|
||||||
- [Public server node list](https://easytier.gd.nkbpal.cn/status/easytier):Maintained by community volunteers, providing a list of public server nodes and status queries.
|
- [Community Documentation](https://doc.oee.icu): Maintained by community volunteers, a plain language guide to using EasyTier, updated in real-time.
|
||||||
- Telegram:https://t.me/easytier
|
- [Public Server Node List](https://easytier.gd.nkbpal.cn/status/easytier): Maintained by community volunteers, provides a list of public server nodes and status queries.
|
||||||
- QQ Group:[949700262](https://qm.qq.com/q/wFoTUChqZW)
|
- QQ Group: [949700262](https://qm.qq.com/q/wFoTUChqZW)
|
||||||
|
- Telegram: https://t.me/easytier
|
||||||
|
|
||||||
|
## Sponsor {#sponsor}
|
||||||
|
|
||||||
|
If you find EasyTier helpful, please consider sponsoring us.
|
||||||
|
|
||||||
|
Software development and maintenance require a lot of time and effort, and your sponsorship will help us better maintain and improve EasyTier.
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<img src="/assets/weixin.png" alt="WeChat" width="300" style="display: inline-block" />
|
||||||
|
<img src="/assets/zhifubao.png" alt="Alipay" width="300" style="display: inline-block; margin-left: 2em"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Home />
|
||||||
|
|||||||
@@ -0,0 +1,201 @@
|
|||||||
|
---
|
||||||
|
home: hello
|
||||||
|
---
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { data } from '../metadata.data.js'
|
||||||
|
|
||||||
|
interface Package {
|
||||||
|
os: string
|
||||||
|
arch: string
|
||||||
|
gui_pkg_tmpl: record<string, string>
|
||||||
|
cli_pkg_tmpl: record<string, string> // key: format, value: url
|
||||||
|
comment?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
function gen_pkg_without_gui(os: string, archs: string[]): Package[] {
|
||||||
|
return archs.map(arch => {
|
||||||
|
return {
|
||||||
|
os,
|
||||||
|
arch,
|
||||||
|
gui_pkg_tmpl: {},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": `https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-${arch}-v{}.zip`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const packages = ref<Package[]>([
|
||||||
|
{
|
||||||
|
os: 'Windows',
|
||||||
|
arch: 'x86_64',
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"exe": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_x64-setup.exe'
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-windows-x86_64-v{}.zip'
|
||||||
|
},
|
||||||
|
comment: "Windows 7 需要是 SP1 及以上, 并且需要安装 KB3063858、KB4474419 这两个补丁"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "Windows",
|
||||||
|
arch: "arm64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"exe": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_arm64-setup.exe'
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-windows-arm64-v{}.zip'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "Linux",
|
||||||
|
arch: "x86_64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"deb": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_amd64.deb',
|
||||||
|
"AppImage": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_amd64.AppImage',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-x86_64-v{}.zip',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "Linux",
|
||||||
|
arch: "aarch64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"deb": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_arm64.deb',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-aarch64-v{}.zip',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
...gen_pkg_without_gui("Linux", ["arm", "armhf", "armv7", "armv7hf", "mips", "mipsel"]),
|
||||||
|
{
|
||||||
|
os: "MacOS",
|
||||||
|
arch: "x86_64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"dmg": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_x64.dmg',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-macos-x86_64-v{}.zip',
|
||||||
|
},
|
||||||
|
comment: "安装 GUI 后需要手动执行 xattr -c /Applications/easytier-gui.app, 否则会提示文件损坏"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "MacOS",
|
||||||
|
arch: "aarch64",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"dmg": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_aarch64.dmg',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-macos-aarch64-v{}.zip',
|
||||||
|
},
|
||||||
|
comment: "安装 GUI 后需要手动执行 xattr -c /Applications/easytier-gui.app, 否则会提示文件损坏"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "Android",
|
||||||
|
arch: "universal",
|
||||||
|
gui_pkg_tmpl: {
|
||||||
|
"apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-universal-release.apk',
|
||||||
|
},
|
||||||
|
cli_pkg_tmpl: {},
|
||||||
|
comment: "遇到显示界面显示异常,请尝试升级 WebView"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
os: "FreeBSD 13.2",
|
||||||
|
arch: "x86_64",
|
||||||
|
gui_pkg_tmpl: {},
|
||||||
|
cli_pkg_tmpl: {
|
||||||
|
"zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-freebsd-13.2-x86_64-v{}.zip',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
const all_archs = new Set(packages.value.map(pkg => pkg.arch))
|
||||||
|
const all_os = new Set(packages.value.map(pkg => pkg.os))
|
||||||
|
const all_proxy = new Set(data.github_accels)
|
||||||
|
|
||||||
|
const version = ref(data.easytier_latest_version)
|
||||||
|
|
||||||
|
const url = 'https://github.com/EasyTier/EasyTier/releases/tag/v'
|
||||||
|
const filter_os = ref('')
|
||||||
|
const filter_arch = ref('')
|
||||||
|
const accel_proxy = ref('')
|
||||||
|
|
||||||
|
function renderUrlTmpl(url_tmpl: string): string {
|
||||||
|
return accel_proxy.value + url_tmpl.replace(/\{\}/g, version.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
# 下载 { #download }
|
||||||
|
|
||||||
|
您可以直接前往 [GitHub Release 页面](https://github.com/EasyTier/EasyTier/releases) 查看所有版本的下载链接,或者使用下面的表格查找适合您的版本。
|
||||||
|
|
||||||
|
命令行程序的压缩包中包含三个可执行程序:
|
||||||
|
|
||||||
|
- `easytier-core`:EasyTier 的核心程序
|
||||||
|
- `easytier-cli`:EasyTier 管理程序,启动 easytier-core 后,可以使用 easytier-cli 查看虚拟网信息
|
||||||
|
- `easytier-web`: 用于自建 EasyTier 的 Web 控制台后端,一般情况下无需自建,使用官方提供的 Web 控制台即可
|
||||||
|
|
||||||
|
## <a :href="url + version">EasyTier v{{ version }}</a> { #latest }
|
||||||
|
|
||||||
|
- Github 加速
|
||||||
|
<div>
|
||||||
|
<select name="pets" id="gh-accel-select" v-model="accel_proxy" class="filter-select">
|
||||||
|
<option value=""> 直连 </option>
|
||||||
|
<option v-for="p in all_proxy" :value="p"> {{ p }} </option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- 根据操作系统筛选
|
||||||
|
<div>
|
||||||
|
<select name="pets" id="os-select" v-model="filter_os" class="filter-select">
|
||||||
|
<option value=""> 全部 </option>
|
||||||
|
<option v-for="os in all_os" :value="os"> {{ os }} </option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- 根据硬件架构筛选
|
||||||
|
<div>
|
||||||
|
<select name="pets" id="arch-select" v-model="filter_arch" class="filter-select">
|
||||||
|
<option value=""> 全部 </option>
|
||||||
|
<option v-for="arch in all_archs" :value="arch"> {{ arch }} </option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
|
||||||
|
<thead>
|
||||||
|
<td> 操作系统 </td>
|
||||||
|
<td> 硬件架构 </td>
|
||||||
|
<td> 图形界面程序 GUI </td>
|
||||||
|
<td> 命令行程序 CLI </td>
|
||||||
|
<td> 注意事项 </td>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tr v-for="pkg in packages" v-show="(!filter_os || pkg.os === filter_os) && (!filter_arch || pkg.arch === filter_arch)">
|
||||||
|
|
||||||
|
<td> {{ pkg.os }} </td>
|
||||||
|
<td> {{ pkg.arch }} </td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<a v-for="(url_tmpl, format) in pkg.gui_pkg_tmpl" class="download-link-span" :href="renderUrlTmpl(url_tmpl)">
|
||||||
|
{{format}}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<a v-for="(url_tmpl, format) in pkg.cli_pkg_tmpl" class="download-link-span" :href="renderUrlTmpl(url_tmpl)">
|
||||||
|
{{format}}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{{ pkg.comment }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
@@ -1,81 +1,94 @@
|
|||||||
# 安装 {#installation}
|
# 安装 {#installation}
|
||||||
|
|
||||||
1. **下载预编译的二进制文件**
|
## 安装方式
|
||||||
访问 [GitHub Release 页面](https://github.com/EasyTier/EasyTier/releases) 下载适用于您操作系统的二进制文件。Release 压缩包中同时包含命令行程序和图形界面程序。
|
|
||||||
|
1. **下载预编译的二进制文件(推荐)**
|
||||||
|
|
||||||
|
访问 [⬇️下载页面](./download) 下载适用于您操作系统的二进制文件或安装包。
|
||||||
|
|
||||||
2. **通过 crates.io 安装**
|
2. **通过 crates.io 安装**
|
||||||
|
|
||||||
::: code-group
|
|
||||||
|
|
||||||
```sh [cargo]
|
```sh [cargo]
|
||||||
cargo install easytier
|
cargo install easytier
|
||||||
```
|
```
|
||||||
|
|
||||||
|
3. **DockerHub**
|
||||||
|
|
||||||
|
[DockerHub 镜像地址](https://hub.docker.com/layers/easytier/easytier)
|
||||||
|
|
||||||
|
```sh [docker]
|
||||||
|
docker pull easytier/easytier:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **通过Docker Compose安装**
|
||||||
|
|
||||||
|
::: details docker-compose.yml
|
||||||
|
|
||||||
|
```yaml [docker-compose.yml]
|
||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
watchtower: # 用于自动更新easytier镜像,若不需要请删除这部分
|
||||||
|
command: --interval 3600 --cleanup --label-enable
|
||||||
|
container_name: watchtower
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
- WATCHTOWER_NO_STARTUP_MESSAGE
|
||||||
|
image: containrrr/watchtower
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
easytier:
|
||||||
|
restart: always
|
||||||
|
labels:
|
||||||
|
com.centurylinklabs.watchtower.enable: 'true'
|
||||||
|
privileged: true
|
||||||
|
mem_limit: 0m
|
||||||
|
container_name: easytier
|
||||||
|
hostname: easytier
|
||||||
|
network_mode: host
|
||||||
|
volumes:
|
||||||
|
- /etc/easytier:/root
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
image: easytier/easytier:latest
|
||||||
|
command: -i <ip> --network-name <用户> --network-secret <密码> -p tcp://<服务器地址>:11010
|
||||||
|
```
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
3. **通过源码安装**
|
5. **一键安装脚本 (仅 Linux)**
|
||||||
::: code-group
|
|
||||||
|
```bash
|
||||||
|
wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/install.sh" && bash /tmp/easytier.sh install
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **通过源码安装**
|
||||||
|
|
||||||
```sh [cargo]
|
```sh [cargo]
|
||||||
cargo install --git https://github.com/EasyTier/EasyTier.git easytier
|
cargo install --git https://github.com/EasyTier/EasyTier.git easytier
|
||||||
```
|
```
|
||||||
:::
|
|
||||||
|
|
||||||
4. **通过Docker Compose安装**
|
## 第三方工具
|
||||||
|
|
||||||
::: code-group
|
- [EasyTier Game ( Windows )](/guide/gui/easytier-game)
|
||||||
|
- [EasyTier Manager ( Windows )](/guide/gui/easytier-manager)
|
||||||
```yaml [docker-compose.yml]
|
- [luci-app-easytier ( OpenWrt )](https://github.com/EasyTier/luci-app-easytier)
|
||||||
version: "3.8"
|
|
||||||
services:
|
|
||||||
watchtower: #用于自动更新easytier镜像,若不需要请删除这部分
|
|
||||||
command: --interval 3600 --cleanup --label-enable
|
|
||||||
container_name: watchtower
|
|
||||||
environment:
|
|
||||||
- TZ=Asia/Shanghai
|
|
||||||
- WATCHTOWER_NO_STARTUP_MESSAGE
|
|
||||||
image: containrrr/watchtower
|
|
||||||
restart: always
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
easytier:
|
|
||||||
restart: always
|
|
||||||
labels:
|
|
||||||
com.centurylinklabs.watchtower.enable: "true"
|
|
||||||
privileged: true
|
|
||||||
mem_limit: 0m
|
|
||||||
container_name: easytier
|
|
||||||
hostname: easytier
|
|
||||||
network_mode: host
|
|
||||||
volumes:
|
|
||||||
- /etc/easytier:/root
|
|
||||||
environment:
|
|
||||||
- TZ=Asia/Shanghai
|
|
||||||
image: easytier/easytier:latest
|
|
||||||
command: -i <ip> --network-name <用户> --network-secret <密码> -e tcp://<服务器地址>:11010 -l <监听地址>
|
|
||||||
```
|
|
||||||
:::
|
|
||||||
|
|
||||||
5. 一键安装脚本 (仅 Linux)
|
## 常见问题 {#faq}
|
||||||
|
|
||||||
```bash
|
### 问题 1
|
||||||
wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/install.sh" && bash /tmp/easytier.sh install
|
|
||||||
```
|
|
||||||
|
|
||||||
# 常见问题
|
|
||||||
|
|
||||||
## 问题 1
|
|
||||||
|
|
||||||
Q: Windows 7 无法创建网络,程序崩溃或者报错无法创建虚拟网。
|
Q: Windows 7 无法创建网络,程序崩溃或者报错无法创建虚拟网。
|
||||||
|
|
||||||
A: win7 需要是 SP1 及以上, 并且需要安装 [KB3063858](https://www.microsoft.com/en-us/download/details.aspx?id=47409)、 [KB4474419](https://www.catalog.update.microsoft.com/search.aspx?q=KB4474419) 这两个补丁
|
A: win7 需要是 SP1 及以上, 并且需要安装 [KB3063858](https://www.microsoft.com/en-us/download/details.aspx?id=47409)、 [KB4474419](https://www.catalog.update.microsoft.com/search.aspx?q=KB4474419) 这两个补丁
|
||||||
|
|
||||||
## 问题 2
|
### 问题 2
|
||||||
|
|
||||||
Q: Linux 命令行帮助是英文,如何调整为中文。
|
Q: Linux 命令行帮助是英文,如何调整为中文。
|
||||||
|
|
||||||
A: 需要设置环境变量 LANG=zh_CN,命令: `export LANG=zh_CN`
|
A: 需要设置环境变量 LANG=zh_CN,命令: `export LANG=zh_CN`
|
||||||
|
|
||||||
## 问题 3
|
### 问题 3
|
||||||
|
|
||||||
Q: 启动后提示 TunError
|
Q: 启动后提示 TunError
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# 简介
|
# 功能概览
|
||||||
|
|
||||||
一个简单、安全、去中心化的内网穿透 SD-WAN 异地组网方案,使用 Rust 语言和 Tokio 框架实现。
|
一个简单、安全、去中心化的内网穿透 SD-WAN 异地组网方案,使用 Rust 语言和 Tokio 框架实现。
|
||||||
|
|
||||||
|
|||||||
@@ -2,90 +2,14 @@
|
|||||||
|
|
||||||
支持使用 -c 参数指定配置文件路径。
|
支持使用 -c 参数指定配置文件路径。
|
||||||
|
|
||||||
注意:配置文件的优先级更高,当运行时指定了配置文件,则命令行中除 -c 的其他参数将被忽略,只对配置文件生效。
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./easytier-core -c ./config.yaml
|
easytier-core -c ./config.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
在不使用参数的情况下直接运行 `./easytier-core` 可以获得最小配置文件。使用参数运行可以获得对应参数的配置文件。配置文件会打印在命令行中,可以手动复制对应配置保存为toml文件即可。
|
::: warning 注意
|
||||||
|
注意:配置文件的优先级更高,当运行时指定了配置文件,则命令行中除 `-c` 的其他参数将被忽略,只对配置文件生效。
|
||||||
|
:::
|
||||||
|
|
||||||
下面是一个配置文件的示例以及各种配置项的注解。
|
使用参数运行可以获得对应参数的配置文件。配置文件会打印在命令行中,可以手动复制对应配置保存为toml文件即可。
|
||||||
|
|
||||||
```yaml
|
在不使用参数的情况下直接运行 `easytier-core` 可以获得最小配置文件。
|
||||||
# 实例名称,用于在同一台机器上标识此节点
|
|
||||||
instance_name = ""
|
|
||||||
# 主机名,用于标识此设备的主机名
|
|
||||||
hostname = ""
|
|
||||||
# 实例 ID,一般为 UUID,在同一个虚拟网络中唯一
|
|
||||||
instance_id = ""
|
|
||||||
# 此节点的虚拟网 IPv4 地址,如果为空,则此节点将仅转发数据包,不会创建 TUN 设备
|
|
||||||
ipv4 = ""
|
|
||||||
# 由 Easytier 自动确定并设置IP地址,默认从10.0.0.1开始。警告:在使用 DHCP 时,如果网络中出现 IP 冲突,IP 将自动更改
|
|
||||||
dhcp = false
|
|
||||||
|
|
||||||
# 监听器列表,用于接受连接
|
|
||||||
listeners = [
|
|
||||||
"tcp://0.0.0.0:11010",
|
|
||||||
"udp://0.0.0.0:11010",
|
|
||||||
"wg://0.0.0.0:11011",
|
|
||||||
"ws://0.0.0.0:11011/",
|
|
||||||
"wss://0.0.0.0:11012/",
|
|
||||||
]
|
|
||||||
|
|
||||||
# 退出节点列表
|
|
||||||
exit_nodes = [
|
|
||||||
]
|
|
||||||
|
|
||||||
# 用于管理的 RPC 门户地址
|
|
||||||
rpc_portal = "127.0.0.1:15888"
|
|
||||||
|
|
||||||
[network_identity]
|
|
||||||
# 网络名称,用于标识虚拟网络
|
|
||||||
network_name = ""
|
|
||||||
# 网络密钥,用于验证此节点属于虚拟网络
|
|
||||||
network_secret = ""
|
|
||||||
|
|
||||||
# 这里是对等连接节点配置,可以多段配置
|
|
||||||
[[peer]]
|
|
||||||
uri = ""
|
|
||||||
|
|
||||||
[[peer]]
|
|
||||||
uri = ""
|
|
||||||
|
|
||||||
# 这里是子网代理节点配置,可以有多段配置
|
|
||||||
[[proxy_network]]
|
|
||||||
cidr = "10.0.1.0/24"
|
|
||||||
|
|
||||||
[[proxy_network]]
|
|
||||||
cidr = "10.0.2.0/24"
|
|
||||||
|
|
||||||
# WireGuard 配置信息
|
|
||||||
[vpn_portal_config]
|
|
||||||
# WireGuard 客户端所在的网段,下面为示例
|
|
||||||
client_cidr = "10.14.14.0/24"
|
|
||||||
#wg所监听的端口(请勿和listeners的wg冲突)
|
|
||||||
wireguard_listen = "0.0.0.0:11012"
|
|
||||||
|
|
||||||
[flags]
|
|
||||||
# 连接到对等节点使用的默认协议
|
|
||||||
default_protocol = "tcp"
|
|
||||||
# TUN 设备名称,如果为空,则使用默认名称
|
|
||||||
dev_name = ""
|
|
||||||
# 是否启用加密
|
|
||||||
enable_encryption = true
|
|
||||||
# 是否启用 IPv6 支持
|
|
||||||
enable_ipv6 = true
|
|
||||||
# TUN 设备的 MTU
|
|
||||||
mtu = 1380
|
|
||||||
# 延迟优先模式,将尝试使用最低延迟路径转发流量,默认使用最短路径
|
|
||||||
latency_first = false
|
|
||||||
# 将本节点配置为退出节点
|
|
||||||
enable_exit_node = false
|
|
||||||
# 禁用 TUN 设备
|
|
||||||
no_tun = false
|
|
||||||
# 为子网代理启用 smoltcp 堆栈
|
|
||||||
use_smoltcp = false
|
|
||||||
# 仅转发白名单网络的流量,支持通配符字符串。多个网络名称间可以使用英文空格间隔。如果该参数为空,则禁用转发。默认允许所有网络。例如:'*'(所有网络),'def*'(以def为前缀的网络),'net1 net2'(只允许net1和net2)
|
|
||||||
foreign_network_whitelist = "*"
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -1,54 +1,88 @@
|
|||||||
# 其他
|
# 完整配置选项
|
||||||
|
|
||||||
可使用 `easytier-core --help` 查看全部配置项
|
可使用 `easytier-core --help` 查看全部配置项
|
||||||
|
|
||||||
```sh
|
## 基本设置
|
||||||
一个简单、易用、去中心化的 SD-WAN 异地组网工具,把设备连接进一个虚拟网。
|
|
||||||
|
|
||||||
Usage: easytier-core [OPTIONS]
|
- **启动与版本**
|
||||||
|
|
||||||
Options:
|
- `-h, --help`: 打印帮助信息。
|
||||||
-c, --config-file <CONFIG_FILE> 配置文件路径,注意:如果设置了这个选项,其他所有选项都将被忽略
|
- `-V, --version`: 打印版本信息。
|
||||||
--network-name <NETWORK_NAME> 用于标识此虚拟网络的网络名称 [default: default]
|
|
||||||
--network-secret <NETWORK_SECRET> 网络密钥,用于验证此节点属于虚拟网络 [default: ]
|
- **配置文件**
|
||||||
-i, --ipv4 <IPV4> 此节点的虚拟 IPv4 地址,如果为空,则此节点将仅转发数据包,不会创建TUN设备
|
|
||||||
-d, --dhcp 由Easytier自动确定并设置IP地址,默认从10.0.0.1开始。警告:在使用DHCP时,如果网络中出现IP冲突,IP将自动更改。
|
- `-c, --config-file <CONFIG_FILE>`: 配置文件路径。如果设置了此选项,其他所有选项都将被忽略。
|
||||||
-p, --peers [<PEERS>...] 最初要连接的对等节点
|
|
||||||
-e, --external-node <EXTERNAL_NODE> 使用公共共享节点来发现对等节点
|
- **实例标识**
|
||||||
-n, --proxy-networks <PROXY_NETWORKS> 将本地网络导出到虚拟网中的其他对等节点
|
- `--hostname <HOSTNAME>`: 用于标识此设备的主机名。
|
||||||
-r, --rpc-portal <RPC_PORTAL> 用于管理的RPC门户地址。0表示随机端口,12345表示在localhost的12345上监听,0.0.0.0:12345表示在所有接口的12345上监听。默认是0,首先尝试15888 [default: 0]
|
- `-m, --instance-name <INSTANCE_NAME>`: 实例名称,默认为`default`。
|
||||||
-l, --listeners [<LISTENERS>...] 监听器用于接受连接,允许以下格式:
|
|
||||||
端口号:<11010>,意味着tcp/udp将在11010端口监听,ws/wss将在11010和11011端口监听,wg将在11011端口监听。
|
## 网络配置
|
||||||
url:<tcp://0.0.0.0:11010>,其中tcp可以是tcp、udp、ring、wg、ws、wss协议。
|
|
||||||
协议和端口对:<proto:port>,例如wg:11011,表示使用WireGuard协议在11011端口监听。URL 和 协议端口对 可以多次出现。
|
- **服务器与网络**
|
||||||
[default: 11010]
|
|
||||||
--no-listener 不监听任何端口,只连接到对等节点
|
- `-w, --config-server <CONFIG_SERVER>`: 配置服务器地址。
|
||||||
--console-log-level <CONSOLE_LOG_LEVEL> 控制台日志级别
|
- `--network-name <NETWORK_NAME>`: 网络名称,默认为`default`。
|
||||||
--file-log-level <FILE_LOG_LEVEL> 文件日志级别
|
- `--network-secret <NETWORK_SECRET>`: 网络密钥,默认为空。
|
||||||
--file-log-dir <FILE_LOG_DIR> 存储日志文件的目录
|
|
||||||
--hostname <HOSTNAME> 用于标识此设备的主机名
|
- **IP配置**
|
||||||
-m, --instance-name <INSTANCE_NAME> 实例名称,用于在同一台机器上标识此节点 [default: default]
|
- `-i, --ipv4 <IPV4>`: 此节点的IPv4地址,空表示仅转发数据包。
|
||||||
--vpn-portal <VPN_PORTAL> 定义 WireGuard 门户的URL,允许其他 WireGuard 客户端连接。示例:wg://0.0.0.0:11010/10.14.14.0/24,表示 WireGuard 门户是监听在0.0.0.0:11010的 wireguard 服务器,WireGuard 客户端在10.14.14.0/24网络中
|
- `-d, --dhcp`: 自动设置IP地址,默认从10.0.0.1开始。
|
||||||
--default-protocol <DEFAULT_PROTOCOL> 连接到对等节点时使用的默认协议
|
- `--dev-name <DEV_NAME>`: 可选TUN接口名称。
|
||||||
-u, --disable-encryption 禁用对等节点通信的加密,默认为false,必须与对等节点相同
|
- `--mtu <MTU>`: TUN设备的MTU,默认非加密时为1380,加密时为1360。
|
||||||
--multi-thread 使用多线程运行时,默认为单线程
|
|
||||||
--disable-ipv6 不使用IPv6
|
## 连接管理
|
||||||
--dev-name <DEV_NAME> 可选的TUN接口名称
|
|
||||||
--mtu <MTU> TUN设备的MTU,默认为非加密时为1420,加密时为1400
|
- **监听器与门户**
|
||||||
--latency-first 延迟优先模式,将尝试使用最低延迟路径转发流量,默认使用最短路径
|
|
||||||
--exit-nodes [<EXIT_NODES>...] 转发所有流量的出口节点,虚拟IPv4地址,优先级由列表顺序决定
|
- `-l, --listeners [<LISTENERS>...]`: 监听器用于接受连接。
|
||||||
--enable-exit-node 允许此节点成为出口节点
|
- `--mapped-listeners [<MAPPED_LISTENERS>...]`: 指定监听器的公网地址。
|
||||||
--no-tun 不创建TUN设备,可以使用子网代理访问节点
|
- `--no-listener`: 不监听任何端口。
|
||||||
--use-smoltcp 为子网代理启用smoltcp堆栈
|
- `--vpn-portal <VPN_PORTAL>`: 定义VPN门户的URL。
|
||||||
--manual-routes [<MANUAL_ROUTES>...] 手动分配路由CIDR,将禁用子网代理和从对等节点传播的wireguard路由。例如:192.168.0.0/16
|
- `--rpc-portal <RPC_PORTAL>`: 管理的RPC门户地址,默认尝试15888。
|
||||||
--relay-network-whitelist [<RELAY_NETWORK_WHITELIST>...] 仅转发白名单网络的流量,支持通配符字符串。多个网络名称间可以使用英文空格间隔。
|
|
||||||
如果该参数为空,则禁用转发。默认允许所有网络。
|
- **节点与路由**
|
||||||
例如:'*'(所有网络),'def*'(以def为前缀的网络),'net1 net2'(只允许net1和net2)"
|
- `-p, --peers [<PEERS>...]`: 初始要连接的对等节点。
|
||||||
--disable-p2p 禁用P2P通信,只通过--peers指定的节点转发数据包
|
- `-e, --external-node <EXTERNAL_NODE>`: 使用公共共享节点来发现对等节点。
|
||||||
--disable-udp-hole-punching 禁用UDP打洞功能
|
- `--exit-nodes [<EXIT_NODES>...]`: 转发所有流量的出口节点。
|
||||||
--relay-all-peer-rpc 转发所有对等节点的RPC数据包,即使对等节点不在转发网络白名单中。这可以帮助白名单外网络中的对等节点建立P2P连接。
|
- `--enable-exit-node`: 允许此节点成为出口节点。
|
||||||
--socks5 <SOCKS5> 启用 socks5 服务器,允许 socks5 客户端访问虚拟网络. 格式: <端口>,例如:1080
|
- `--manual-routes [<MANUAL_ROUTES>...]`: 手动分配路由CIDR。
|
||||||
--ipv6-listener <IPV6_LISTENER> IPv6 监听器的URL,例如:tcp://[::]:11010,如果未设置,将在随机UDP端口上监听
|
- `--relay-network-whitelist [<RELAY_NETWORK_WHITELIST>...]`: 仅转发白名单网络的流量。
|
||||||
-h, --help Print help
|
|
||||||
-V, --version Print version
|
## 日志和调试
|
||||||
```
|
|
||||||
|
- **日志级别**
|
||||||
|
|
||||||
|
- `--console-log-level <CONSOLE_LOG_LEVEL>`: 控制台日志级别。
|
||||||
|
- `--file-log-level <FILE_LOG_LEVEL>`: 文件日志级别。
|
||||||
|
|
||||||
|
- **日志存储**
|
||||||
|
- `--file-log-dir <FILE_LOG_DIR>`: 存储日志文件的目录。
|
||||||
|
|
||||||
|
## 高级功能
|
||||||
|
|
||||||
|
- **性能优化**
|
||||||
|
|
||||||
|
- `--latency-first`: 延迟优先模式。
|
||||||
|
- `--multi-thread`: 使用多线程运行时。
|
||||||
|
- `--disable-udp-hole-punching`: 禁用UDP打洞功能。
|
||||||
|
|
||||||
|
- **安全与隐私**
|
||||||
|
|
||||||
|
- `-u, --disable-encryption`: 禁用加密,默认为false。
|
||||||
|
- `--disable-ipv6`: 不使用IPv6。
|
||||||
|
- `--compression <COMPRESSION>`: 使用的压缩算法,默认为`none`。
|
||||||
|
|
||||||
|
- **代理与转发**
|
||||||
|
|
||||||
|
- `--proxy-networks <PROXY_NETWORKS>`: 导出本地网络到其他对等节点。
|
||||||
|
- `--socks5 <SOCKS5>`: 启用 socks5 服务器。
|
||||||
|
- `--ipv6-listener <IPV6_LISTENER>`: IPv6监听器URL。
|
||||||
|
- `--no-tun`: 不创建TUN设备。
|
||||||
|
- `--use-smoltcp`: 启用smoltcp堆栈。
|
||||||
|
- `--bind-device <BIND_DEVICE>`: 绑定套接字到物理设备。
|
||||||
|
- `--relay-all-peer-rpc`: 转发所有对等节点的RPC数据包。
|
||||||
|
|
||||||
|
- **限制通信**
|
||||||
|
- `--disable-p2p`: 禁用P2P通信。
|
||||||
|
- `--no-tun`: 不创建TUN设备以使用子网代理访问节点。
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
# 去中心组网
|
||||||
|
|
||||||
|
绝大多数组网软件是中心化的,所有设备必须与中心服务器建连才可组网。
|
||||||
|
|
||||||
|
EasyTier 是去中心化的,不区分服务器和客户端,只要一个设备可以与虚拟网中任意一个节点通信,就可以加入虚拟网。
|
||||||
|
|
||||||
|
## 双节点组网
|
||||||
|
|
||||||
|
假设双节点的网络拓扑如下
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
subgraph 节点 A IP 22.1.1.1
|
||||||
|
nodeA[EasyTier<br/>10.144.144.1]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph 节点 B IP 33.1.1.1
|
||||||
|
nodeB[EasyTier</br>10.144.144.2]
|
||||||
|
end
|
||||||
|
|
||||||
|
nodeA <-----> nodeB
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
1. 在节点 A 上执行:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -i 10.144.144.1
|
||||||
|
```
|
||||||
|
|
||||||
|
2. 在节点 B 执行
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -d -p udp://22.1.1.1:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
其中 `-d` 代表 DHCP 模式,EasyTier 会自动获取一个 IP 地址。
|
||||||
|
|
||||||
|
## 三节点组网
|
||||||
|
|
||||||
|
基于刚才的双节点组网例子,第三个节点 C 如果要加入虚拟网,既可以连接到节点 A,也可以连接到节点 B。
|
||||||
|
|
||||||
|
假设通过连接到节点 A 组网,网络拓扑如下:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
subgraph 节点 A IP 22.1.1.1
|
||||||
|
nodeA[EasyTier<br/>10.144.144.1]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph 节点 C
|
||||||
|
nodeC[EasyTier<br/>10.144.144.3]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph 节点 B IP 33.1.1.1
|
||||||
|
nodeB[EasyTier</br>10.144.144.2]
|
||||||
|
end
|
||||||
|
|
||||||
|
nodeA <-----> nodeB
|
||||||
|
|
||||||
|
nodeC <-----> nodeA
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
在节点 C 上执行:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -d -p udp://22.1.1.1:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
随后 C 即可与 A 和 B 通过虚拟网通信。
|
||||||
@@ -0,0 +1,180 @@
|
|||||||
|
# 快速组网
|
||||||
|
|
||||||
|
## 利用共享节点组网
|
||||||
|
|
||||||
|
当你没有公网 IP 时,可以使用 EasyTier 社区提供的免费共享节点快速组网。节点间成功组网后,
|
||||||
|
会自动尝试 NAT 穿透并建立 P2P 连接,在成功 P2P 之前,共享节点会帮助转发数据。
|
||||||
|
|
||||||
|
假设有两个节点 A 和 B:
|
||||||
|
|
||||||
|
1. 在节点 A 上执行(请替换 abc 为更复杂的网络名,否则会因为网络名冲突导致连接失败)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -i 10.144.144.1 --network-name abc --network-secret abc -p tcp://public.easytier.cn:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
> `-i` 代表指定虚拟网 IP 地址,默认 /24 网段;
|
||||||
|
>
|
||||||
|
> `--network-name` 和 `--network-secret` 代表网络名和网络密钥;
|
||||||
|
>
|
||||||
|
> `-p` 代表指定节点地址,此处使用官方的共享节点。
|
||||||
|
|
||||||
|
2. 在节点 B 上执行
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core -d --network-name abc --network-secret abc -p tcp://public.easytier.cn:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
> `-d` 代表 DHCP 模式,EasyTier 会自动获取一个 IP 地址。
|
||||||
|
|
||||||
|
3. 测试联通性
|
||||||
|
|
||||||
|
两个节点应成功连接并能够在虚拟子网内通信,可以在节点 B 上执行进行测试。
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ping 10.144.144.1
|
||||||
|
```
|
||||||
|
|
||||||
|
::: warning 注意
|
||||||
|
部分系统默认开启防火墙并会阻止入站流量,可能会导致虚拟 IP 无法 ping 通或无法访问各种服务,需要手动关闭防火墙或添加规则。
|
||||||
|
:::
|
||||||
|
|
||||||
|
## 查看虚拟网状态
|
||||||
|
|
||||||
|
easytier-core 启动后,可以使用 easytier-cli 进行管理。
|
||||||
|
|
||||||
|
- 查看虚拟网中的节点信息
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-cli peer
|
||||||
|
```
|
||||||
|
|
||||||
|
| ipv4 | hostname | cost | lat_ms | loss_rate | rx_bytes | tx_bytes | tunnel_proto | nat_type | id |
|
||||||
|
| :----------- | :------- | :--- | :----- | :-------- | :------- | :------- | :----------- | :------- | :-------- |
|
||||||
|
| 10.144.144.1 | abc-dec | 1 | 3.452 | 0 | 17.33kB | 20.42kB | udp | FullCone | 390879727 |
|
||||||
|
|
||||||
|
- 查看虚拟网路由信息
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-cli route
|
||||||
|
```
|
||||||
|
|
||||||
|
| ipv4 | hostname | proxy_cidrs | next_hop_ipv4 | next_hop_hostname | next_hop_lat | cost |
|
||||||
|
| :----------- | :------- | :---------- | :------------ | :---------------- | :----------- | :--- |
|
||||||
|
| 10.144.144.1 | abc-dec | | DIRECT | | 3.646 | 1 |
|
||||||
|
|
||||||
|
- 查看本节点的信息
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-cli node
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
┌───────────────┬──────────────────────┐
|
||||||
|
│ Virtual IP │ 10.144.144.1 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Hostname │ archlinux-base │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Proxy CIDRs │ 10.147.223.0/24 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Peer ID │ 2616333191 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Public IP │ 75.52.125.26 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ UDP Stun Type │ FullCone │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 1 │ tcp://0.0.0.0:11010 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 2 │ udp://0.0.0.0:11010 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 3 │ wg://0.0.0.0:11011 │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 4 │ ws://0.0.0.0:11011/ │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 5 │ wss://0.0.0.0:11012/ │
|
||||||
|
├───────────────┼──────────────────────┤
|
||||||
|
│ Listener 6 │ udp://[::]:37039 │
|
||||||
|
└───────────────┴──────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## 使用多个共享节点
|
||||||
|
|
||||||
|
为了避免单个共享节点故障导致虚拟网不可用,可以同时连接到多个共享节点。只需要指定多个 -p 参数即可,如:`-p tcp://1.1.1.1:11010 -p udp://1.1.1.2:11011`。虚拟网中每个节点最好指定相同的公共服务器列表。
|
||||||
|
|
||||||
|
这依赖了 EasyTier 所支持的共享节点集群功能,假设有 A 和 B 两个共享节点,这两个共享节点互联组成集群。当 C 和 D 希望组网时,C 和 D 可以同时连接到 A 和 B,这样即使 A 或 B 故障,C 和 D 之间依然可以通信。组网模式如图所示:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
subgraph 节点 C
|
||||||
|
nodeC[节点 C</br>网络名: abc]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph 共享节点 A
|
||||||
|
nodeA[共享节点 A</br>网络名: Public]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph 共享节点 B
|
||||||
|
nodeB[共享节点 B</br>网络名: Public]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph 节点 D
|
||||||
|
nodeD[节点 D</br>网络名: abc]
|
||||||
|
end
|
||||||
|
|
||||||
|
nodeA <-----> nodeB
|
||||||
|
|
||||||
|
nodeC <-----> nodeA
|
||||||
|
nodeC <-----> nodeB
|
||||||
|
|
||||||
|
nodeA <-----> nodeD
|
||||||
|
nodeB <-----> nodeD
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
即使出现网络分区,即 C 只能连接到 A,D 只能连接到 B,C 和 D 之间依然可以通信。
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
subgraph 节点 C
|
||||||
|
nodeC[节点 C</br>网络名: abc]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph 共享节点 A
|
||||||
|
nodeA[共享节点 A</br>网络名: Public]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph 共享节点 B
|
||||||
|
nodeB[共享节点 B</br>网络名: Public]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph 节点 D
|
||||||
|
nodeD[节点 D</br>网络名: abc]
|
||||||
|
end
|
||||||
|
|
||||||
|
nodeA <-----> nodeB
|
||||||
|
|
||||||
|
nodeC <-----> nodeA
|
||||||
|
|
||||||
|
nodeB <-----> nodeD
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 同时加入多个虚拟网
|
||||||
|
|
||||||
|
EasyTier 支持在同一个设备上同时运行多个进程,每个进程启动时使用不同参数即可加入不同的虚拟网。
|
||||||
|
需要注意,多个虚拟网的虚拟 IP 网段不应该重叠,否则会导致路由冲突。
|
||||||
|
|
||||||
|
另外,多开 EasyTier 时,需要指定不同的监听器端口,否则会导致端口冲突。
|
||||||
|
|
||||||
|
比如可以使用如下命令启动两个 EasyTier 进程:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo easytier-core --network-name net1 -p tcp://public.easytier.cn:11010 -l 11010
|
||||||
|
sudo easytier-core --network-name net2 -p tcp://public.easytier.cn:11010 -l 21010
|
||||||
|
```
|
||||||
|
|
||||||
|
> `-l` 代表指定监听器端口。
|
||||||
@@ -1,24 +1,20 @@
|
|||||||
# 自建公共服务器
|
# 搭建共享节点
|
||||||
|
|
||||||
用户可以使用自己的公网节点自建用于无公网 IP 组网的公共服务器,方便其他无公网 IP 的用户组网。 需要不带任何参数启动 EasyTier,该节点就可作为公共服务器使用(不需要 root 权限):
|
用户可以使用自己的公网节点自建用于无公网 IP 组网的公共共享节点,方便其他无公网 IP 的用户组网。 需要不带任何参数启动 EasyTier,该节点就可作为公共服务器使用(不需要 root 权限):
|
||||||
|
|
||||||
```
|
```
|
||||||
easytier-core
|
easytier-core
|
||||||
```
|
```
|
||||||
|
|
||||||
另外 EasyTier 支持服务器集群。每个虚拟网络(通过相同的网络名称和密钥建链)都可以充当公共服务器集群,其他网络的节点可以连接到公共服务器集群中的任意节点,无需公共 IP 即可发现彼此。运行自建的公共服务器集群与运行虚拟网络完全相同,不过可以跳过配置 ipv4 地址。
|
另外 EasyTier 支持共享节点集群。每个虚拟网络(通过相同的网络名称和密钥建链)都可以充当共享节点集群,其他网络的节点可以连接到共享节点集群中的任意节点,无需公共 IP 即可发现彼此。运行自建的公共服务器集群与运行虚拟网络完全相同,不过可以跳过配置 ipv4 地址。
|
||||||
|
|
||||||
也可以使用以下命令加入官方公共服务器集群,后续将实现公共服务器集群的节点间负载均衡:
|
如果你希望为 EasyTier 社区贡献公共服务器,可以联系管理员,我们将告知你如何将你的节点添加到社区共享节点列表中。当然这需要你的节点有一定的带宽和稳定性。
|
||||||
|
|
||||||
```
|
|
||||||
sudo easytier-core --network-name easytier --network-secret easytier -p tcp://public.easytier.top:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
## 关闭转发
|
## 关闭转发
|
||||||
|
|
||||||
另外,默认情况下, EasyTier 的每个节点都允许为其他虚拟网提供转发服务,即使该节点已经指定了 网络名 (`--network-name`) 和 网络密钥 (`--network-secret`)、并已加入一个虚拟网。
|
另外,默认情况下, EasyTier 的每个节点都允许为其他虚拟网提供转发服务,即使该节点已经指定了 网络名 (`--network-name`) 和 网络密钥 (`--network-secret`)、并已加入一个虚拟网。
|
||||||
|
|
||||||
若需改变此行为,可通过 `--relay-network-whitelist` 参数限定可被转发的网络名白名单(空格分割的通配符列表,如 ` "ab* abc" `)。当该参数的列表为空时,就不会为所有其他网络提供转发服务。
|
若需改变此行为,可通过 `--relay-network-whitelist` 参数限定可被转发的网络名白名单(空格分割的通配符列表,如 `"ab* abc"`)。当该参数的列表为空时,就不会为所有其他网络提供转发服务。
|
||||||
|
|
||||||
EasyTier 可以做到不转发其他虚拟网的网络包,而是只帮助他们建立 P2P 链接,只需将白名单置空,并设置仅转发 RPC 流量即可。参考命令为:
|
EasyTier 可以做到不转发其他虚拟网的网络包,而是只帮助他们建立 P2P 链接,只需将白名单置空,并设置仅转发 RPC 流量即可。参考命令为:
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
# 多节点组网
|
|
||||||
|
|
||||||
基于刚才的双节点组网例子,如果有更多的节点需要加入虚拟网络,可以使用如下命令。
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
其中 `--peers ` 参数可以填写任意一个已经在虚拟网络中的节点的监听地址。
|
|
||||||
|
|
||||||
---
|
|
||||||
@@ -6,11 +6,11 @@
|
|||||||
flowchart LR
|
flowchart LR
|
||||||
|
|
||||||
subgraph 节点 A
|
subgraph 节点 A
|
||||||
nodeA[EasyTier\n10.144.144.1]
|
nodeA[EasyTier</br>10.144.144.1]
|
||||||
end
|
end
|
||||||
|
|
||||||
subgraph 节点 B
|
subgraph 节点 B
|
||||||
nodeB[EasyTier\n10.144.144.2]
|
nodeB[EasyTier</br>10.144.144.2]
|
||||||
end
|
end
|
||||||
|
|
||||||
id1[[10.1.1.0/24]]
|
id1[[10.1.1.0/24]]
|
||||||
@@ -25,9 +25,12 @@ id2 -.无需 EasyTier 访问对方子网.-> id1
|
|||||||
|
|
||||||
网对网配置成功后,192.168.1.0/24 子网的设备可以访问 10.1.1.0/24 子网的设备互相通信且无需安装 EasyTier。
|
网对网配置成功后,192.168.1.0/24 子网的设备可以访问 10.1.1.0/24 子网的设备互相通信且无需安装 EasyTier。
|
||||||
|
|
||||||
|
## Linux 网对网配置
|
||||||
|
|
||||||
要实现网对网,需要 节点 A 是 192.168.1.0/24 子网的网关。两个 EasyTier 节点的启动及配置参数如下:
|
要实现网对网,需要 节点 A 是 192.168.1.0/24 子网的网关。两个 EasyTier 节点的启动及配置参数如下:
|
||||||
|
|
||||||
节点 A
|
节点 A
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 启动 EasyTier 并代理 192.168.1.0/24 网段,并使用公共服务器帮助组网
|
# 启动 EasyTier 并代理 192.168.1.0/24 网段,并使用公共服务器帮助组网
|
||||||
easytier-core -i 10.144.144.1 -n 192.168.1.0/24 -p tcp://public.easytier.top:11010 --network-name n2n_test
|
easytier-core -i 10.144.144.1 -n 192.168.1.0/24 -p tcp://public.easytier.top:11010 --network-name n2n_test
|
||||||
@@ -39,6 +42,7 @@ iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT
|
|||||||
```
|
```
|
||||||
|
|
||||||
节点 B
|
节点 B
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 启动 EasyTier 并代理 10.1.1.0/24 网段,并使用公共服务器帮助组网
|
# 启动 EasyTier 并代理 10.1.1.0/24 网段,并使用公共服务器帮助组网
|
||||||
easytier-core -i 10.144.144.2 -n 10.1.1.0/24 -p tcp://public.easytier.top:11010 --network-name n2n_test
|
easytier-core -i 10.144.144.2 -n 10.1.1.0/24 -p tcp://public.easytier.top:11010 --network-name n2n_test
|
||||||
|
|||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
使用无 TUN 模式组网时,节点可以通过虚拟 IP 被访问(TCP、UDP 和 ICMP 都支持),也可以做子网代理(使用 -n 参数)。但是无法主动发起对其他节点的访问。
|
使用无 TUN 模式组网时,节点可以通过虚拟 IP 被访问(TCP、UDP 和 ICMP 都支持),也可以做子网代理(使用 -n 参数)。但是无法主动发起对其他节点的访问。
|
||||||
|
|
||||||
为了在无 TUN 模式下主动访问其他节点,可使用 EaayTier 的 [SOCKS5 服务器功能](/guide/network/socks5)。
|
为了在无 TUN 模式下主动访问其他节点,可使用 EasyTier 的 [SOCKS5 服务器功能](/guide/network/socks5)。
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# P2P 优化
|
||||||
|
|
||||||
|
如果你希望 EasyTier 更容易与其他节点建立 P2P 连接,可以通过以下方式进行优化。
|
||||||
|
|
||||||
|
## IPv6
|
||||||
|
|
||||||
|
EasyTier 支持节点间通过 IPv6 进行 P2P 通信,默认 EasyTier 会随机监听一个 IPv6 UDP 端口。
|
||||||
|
|
||||||
|
在某些情况下,指定监听 IPv6 地址和端口可能更有利于节点间的 P2P 通信。
|
||||||
|
可以使用 `-l` 配置 IPv6 的监听器。 例如:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-core -l 'tcp://[::]:12345' -l 'udp://[::]:12345'
|
||||||
|
```
|
||||||
|
|
||||||
|
## 指定公网 IP 和端口
|
||||||
|
|
||||||
|
某些情况下,节点拥有公网的 IP 和 端口,但 EasyTier 无法正确识别 (比如 NAT 主机),可以使用 `--mapped_listeners` 配置公网 IP 和端口。 例如:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-core --mapped_listeners tcp://8.8.8.8:12345 -l tcp://0.0.0.0:11010
|
||||||
|
```
|
||||||
|
|
||||||
|
该 EasyTier 实例监听本地的 11010 TCP 端口,且该端口被映射到公网的 12345 端口。其他节点会尝试连接到公网的 12345 端口。
|
||||||
|
|
||||||
|
## 关闭上网辅助工具
|
||||||
|
|
||||||
|
一些上网辅助工具会影响 STUN 测试的结果,导致 EasyTier 无法识别 NAT 类型,或者识别到错误的公网 IP 和端口。可以尝试关闭这些工具。
|
||||||
@@ -6,11 +6,11 @@
|
|||||||
flowchart LR
|
flowchart LR
|
||||||
|
|
||||||
subgraph 节点 A IP 22.1.1.1
|
subgraph 节点 A IP 22.1.1.1
|
||||||
nodeA[EasyTier\n10.144.144.1]
|
nodeA[EasyTier</br>10.144.144.1]
|
||||||
end
|
end
|
||||||
|
|
||||||
subgraph 节点 B
|
subgraph 节点 B
|
||||||
nodeB[EasyTier\n10.144.144.2]
|
nodeB[EasyTier</br>10.144.144.2]
|
||||||
end
|
end
|
||||||
|
|
||||||
id1[[10.1.1.0/24]]
|
id1[[10.1.1.0/24]]
|
||||||
@@ -43,6 +43,15 @@ sudo easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24
|
|||||||
ping 10.1.1.2
|
ping 10.1.1.2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
::: warning 提示
|
||||||
|
子网代理的 -n 参数可以多次指定,以代理多个子网;也可以将掩码设置为 32 以代理单个 IP 地址。
|
||||||
|
|
||||||
|
```sh
|
||||||
|
easytier-core -n 10.1.1.0/24 -n 10.2.0.0/16 -n 10.3.3.3/32
|
||||||
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
## 手工指定路由
|
## 手工指定路由
|
||||||
|
|
||||||
默认情况下,当虚拟网中的某个节点配置了子网代理后,子网代理的网段会被同步到虚拟网内的所有节点上,并自动生成一条路由,将发往这些网段的数据包交由虚拟网处理。
|
默认情况下,当虚拟网中的某个节点配置了子网代理后,子网代理的网段会被同步到虚拟网内的所有节点上,并自动生成一条路由,将发往这些网段的数据包交由虚拟网处理。
|
||||||
@@ -57,4 +66,12 @@ sudo easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24
|
|||||||
|
|
||||||
如果无法关闭防火墙,可以尝试用用户态的网络栈做子网代理,可以免去配置防火墙的步骤。只需要在启动 EasyTier 时添加 `--use-smoltcp` 参数即可。
|
如果无法关闭防火墙,可以尝试用用户态的网络栈做子网代理,可以免去配置防火墙的步骤。只需要在启动 EasyTier 时添加 `--use-smoltcp` 参数即可。
|
||||||
|
|
||||||
|
::: warning 提示
|
||||||
|
|
||||||
|
用户态协议栈在性能、拥塞控制等方面会劣于内核协议栈。
|
||||||
|
|
||||||
|
目前 `--use-smoltcp` 参数仅影响 TCP 协议,UDP 和 ICMP 无论是否使用该参数都会使用用户态协议栈。
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,127 +0,0 @@
|
|||||||
# 双节点组网
|
|
||||||
|
|
||||||
假设双节点的网络拓扑如下
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart LR
|
|
||||||
|
|
||||||
subgraph 节点 A IP 22.1.1.1
|
|
||||||
nodeA[EasyTier\n10.144.144.1]
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph 节点 B
|
|
||||||
nodeB[EasyTier\n10.144.144.2]
|
|
||||||
end
|
|
||||||
|
|
||||||
nodeA <-----> nodeB
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
1. 在节点 A 上执行:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo easytier-core --ipv4 10.144.144.1
|
|
||||||
```
|
|
||||||
|
|
||||||
命令执行成功会有如下打印。
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ easytier-core --ipv4 10.144.144.1
|
|
||||||
Starting easytier with config:
|
|
||||||
############### TOML ##############
|
|
||||||
|
|
||||||
instance_name = "default"
|
|
||||||
instance_id = "7294d13c-d119-49ae-a5f7-8c3a912538d7"
|
|
||||||
ipv4 = "10.144.144.1"
|
|
||||||
listeners = [
|
|
||||||
"tcp://0.0.0.0:11010",
|
|
||||||
"udp://0.0.0.0:11010",
|
|
||||||
"wg://0.0.0.0:11011",
|
|
||||||
]
|
|
||||||
peer = []
|
|
||||||
rpc_portal = "127.0.0.1:15888"
|
|
||||||
|
|
||||||
[network_identity]
|
|
||||||
network_name = "default"
|
|
||||||
network_secret = ""
|
|
||||||
|
|
||||||
[flags]
|
|
||||||
default_protocol = "tcp"
|
|
||||||
enable_encryption = true
|
|
||||||
enable_ipv6 = true
|
|
||||||
|
|
||||||
-----------------------------------
|
|
||||||
xxxx-xx-xx xx:xx:xx: tun device ready. dev: tun0
|
|
||||||
xxxx-xx-xx xx:xx:xx: new listener added. listener: tcp://0.0.0.0:11010
|
|
||||||
xxxx-xx-xx xx:xx:xx: new listener added. listener: udp://0.0.0.0:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
2. 在节点 B 执行
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
|
|
||||||
```
|
|
||||||
|
|
||||||
3. 测试联通性
|
|
||||||
|
|
||||||
两个节点应成功连接并能够在虚拟子网内通信
|
|
||||||
|
|
||||||
```sh
|
|
||||||
ping 10.144.144.2
|
|
||||||
```
|
|
||||||
|
|
||||||
使用 easytier-cli 查看子网中的节点信息
|
|
||||||
|
|
||||||
```sh
|
|
||||||
easytier-cli peer
|
|
||||||
```
|
|
||||||
|
|
||||||
| ipv4 | hostname | cost | lat_ms | loss_rate | rx_bytes | tx_bytes | tunnel_proto | nat_type | id |
|
|
||||||
| :----------- | :------- | :--- | :----- | :-------- | :------- | :------- | :----------- | :------- | :-------- |
|
|
||||||
| 10.144.144.1 | abc-dec | 1 | 3.452 | 0 | 17.33kB | 20.42kB | udp | FullCone | 390879727 |
|
|
||||||
|
|
||||||
使用 easytier-cli 查看子网中的路由信息
|
|
||||||
|
|
||||||
```sh
|
|
||||||
easytier-cli route
|
|
||||||
```
|
|
||||||
|
|
||||||
| ipv4 | hostname | proxy_cidrs | next_hop_ipv4 | next_hop_hostname | next_hop_lat | cost |
|
|
||||||
| :----------- | :------- | :---------- | :------------ | :---------------- | :----------- | :--- |
|
|
||||||
| 10.144.144.1 | abc-dec | | DIRECT | | 3.646 | 1 |
|
|
||||||
|
|
||||||
使用 easytier-cli 查看本节点的信息
|
|
||||||
|
|
||||||
```sh
|
|
||||||
easytier-cli node
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
┌───────────────┬──────────────────────┐
|
|
||||||
│ Virtual IP │ 10.144.144.1 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Hostname │ archlinux-base │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Proxy CIDRs │ 10.147.223.0/24 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Peer ID │ 2616333191 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Public IP │ 75.52.125.26 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ UDP Stun Type │ FullCone │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 1 │ tcp://0.0.0.0:11010 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 2 │ udp://0.0.0.0:11010 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 3 │ wg://0.0.0.0:11011 │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 4 │ ws://0.0.0.0:11011/ │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 5 │ wss://0.0.0.0:11012/ │
|
|
||||||
├───────────────┼──────────────────────┤
|
|
||||||
│ Listener 6 │ udp://[::]:37039 │
|
|
||||||
└───────────────┴──────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# 使用 Web 控制台
|
||||||
|
|
||||||
|
EasyTier 支持使用 [Web 控制台](https://easytier.cn/web#/) 来管理 EasyTier 节点,包括查看节点状态、配置节点参数、查看节点日志等。
|
||||||
|
|
||||||
|
## 注册账号
|
||||||
|
|
||||||
|
首次使用 Web 控制台需要注册账号,[注册地址](https://easytier.cn/web#/auth/register)。
|
||||||
|
|
||||||
|
## 运行 EasyTier 节点
|
||||||
|
|
||||||
|
如果希望 EasyTier 节点可以被 Web 控制台管理,需要在启动时指定 `--config-server` 或 `-w` 参数,例如:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
./easytier-core -w <你的用户名>
|
||||||
|
```
|
||||||
|
|
||||||
|
> 请将 `<你的用户名>` 替换为你在 Web 控制台注册的用户名。
|
||||||
|
|
||||||
|
如果终端出现类似 “连接成功” 或 “已连接服务器” 的提示,则表示 Easytier Core 已成功连接到 Web 控制台的服务器。
|
||||||
|
|
||||||
|
::: danger 注意
|
||||||
|
一台机器只能有一个 EasyTier 进程被 Web 控制台管理,如果有多个进程可能会导致奇怪的问题。
|
||||||
|
:::
|
||||||
|
|
||||||
|
## 使用 Web 控制台
|
||||||
|
|
||||||
|
使用刚才注册的用户名和密码登录 [Web 控制台](https://easytier.cn/web#/),登录成功后会看到节点列表。
|
||||||
|
|
||||||
|
在网页上选择你需要配置的设备。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
点开设备后,点击绿色的连接按钮。
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
进行配置
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
接下来的配置步骤与之前配置带 GUI 的程序相同。
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# 路线图
|
# 路线图
|
||||||
|
|
||||||
- [ ] 完善文档和用户指南。
|
- [ ] 支持使用 KCP / FEC 等优化 P2P 传输。
|
||||||
- [ ] 支持 TCP 打洞等特性。
|
- [ ] 支持 UPnP。
|
||||||
- [ ] 支持 IOS。
|
- [ ] 支持 IOS。
|
||||||
- [ ] 支持 Web 配置管理。
|
- [ ] 支持 TCP 打洞。
|
||||||
|
- [x] 支持 Web 配置管理。
|
||||||
|
- [x] 完善文档和用户指南
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
# 使用 Web 管理界面组网
|
|
||||||
@@ -5,45 +5,56 @@ layout: home
|
|||||||
hero:
|
hero:
|
||||||
name: EasyTier
|
name: EasyTier
|
||||||
text: 由 Rust 和 Tokio 驱动
|
text: 由 Rust 和 Tokio 驱动
|
||||||
tagline: 一个简单、安全、去中心化的内网穿透 SD-WAN 异地组网方案
|
tagline: ✨ 一个简单、安全、去中心化的异地组网方案
|
||||||
|
image:
|
||||||
|
light: '/gui-config-light.png'
|
||||||
|
dark: '/gui-config-dark.png'
|
||||||
|
alt: 'Easytier GUI 配置界面'
|
||||||
actions:
|
actions:
|
||||||
- theme: brand
|
- theme: brand
|
||||||
text: 快速开始
|
text: 快速开始
|
||||||
link: /guide/introduction
|
link: /guide/installation
|
||||||
- theme: alt
|
- theme: alt
|
||||||
text: 在 Github 上查看
|
text: 下载
|
||||||
link: https://github.com/EasyTier/EasyTier
|
link: /guide/download
|
||||||
- theme: alt
|
- theme: alt
|
||||||
text: 协助改进或翻译文档
|
text: Web 控制台
|
||||||
link: https://github.com/EasyTier/easytier.github.io
|
link: https://easytier.cn/web
|
||||||
- theme: alt
|
- theme: sponsor
|
||||||
text: 参与开发
|
text: 💚 赞助
|
||||||
link: https://github.com/EasyTier/EasyTier/issues
|
link: /#sponsor
|
||||||
|
|
||||||
features:
|
features:
|
||||||
- title: 去中心化
|
- title: 去中心化
|
||||||
details: 无需依赖中心化服务,节点平等且独立。
|
details: 不区分客户端 / 服务端,无需依赖中心化服务,节点平等且独立。
|
||||||
- title: 安全
|
link: /guide/network/decentralized-networking
|
||||||
details: 支持利用 WireGuard 加密通信,也支持 AES-GCM 加密保护中转流量。
|
- title: 易用
|
||||||
- title: 高性能
|
details: |
|
||||||
details: 全链路零拷贝,性能与主流组网软件相当。
|
支持通过 网页 / 客户端 / 命令行 多种方式使用,操作简单。
|
||||||
- title: 无公网 IP 组网
|
</br>
|
||||||
details: 支持利用共享的公网节点组网,可参考配置指南
|
支持使用共享节点一键组网。
|
||||||
- title: NAT 穿透
|
link: /guide/network/web-console
|
||||||
details: 支持基于 UDP 的 NAT 穿透,即使在复杂的网络环境下也能建立稳定的连接。
|
|
||||||
- title: 子网代理(点对网)
|
|
||||||
details: 节点可以将其可访问的网段转发到虚拟网,允许其他节点通过该节点访问这些子网。
|
|
||||||
- title: 智能路由
|
|
||||||
details: 根据流量智能选择链路,减少延迟,提高吞吐量。
|
|
||||||
- title: 跨平台
|
- title: 跨平台
|
||||||
details: |
|
details: |
|
||||||
支持 MacOS/Linux/Windows/FreeBSD/Android 等系统。未来将支持 IOS。
|
支持 Windows / MacOS / Linux / FreeBSD / Android 等系统。
|
||||||
</br>
|
</br>
|
||||||
支持 MIPS、ARM 等硬件架构。
|
支持 X86 / ARM / MIPS 等硬件架构。
|
||||||
</br>
|
link: /guide/download
|
||||||
可执行文件静态链接,部署简单。
|
- title: 安全
|
||||||
- title: GUI 支持
|
details: 支持 AES-GCM 或 WireGuard 加密保护中转流量,免受中间人攻击。
|
||||||
details: 可通过图形界面使用,方便快捷。
|
link: /
|
||||||
|
- title: 高效 NAT 穿透
|
||||||
|
details: 支持基于 UDP 的 NAT 穿透和 IPV6 穿透,在某些情况下可以打通 NAT4-NAT4 的网络。
|
||||||
|
link: /
|
||||||
|
- title: 子网代理
|
||||||
|
details: 节点可以将其可访问的网段转发到虚拟网,允许其他节点通过该节点访问这些子网。
|
||||||
|
link: /guide/network/point-to-networking
|
||||||
|
- title: 智能路由
|
||||||
|
details: 支持延迟优先模式,自动选择最优路径,提供最佳的网络体验。
|
||||||
|
link: /guide/network/configurations
|
||||||
|
- title: 高性能
|
||||||
|
details: 全链路零拷贝,性能与主流组网软件相当。</br> 节点间通信支持 TCP / UDP / QUIC / WG 等多种协议。
|
||||||
|
link: /guide/perf
|
||||||
---
|
---
|
||||||
|
|
||||||
## 相关链接
|
## 相关链接
|
||||||
@@ -53,7 +64,7 @@ features:
|
|||||||
- QQ 群:[949700262](https://qm.qq.com/q/wFoTUChqZW)
|
- QQ 群:[949700262](https://qm.qq.com/q/wFoTUChqZW)
|
||||||
- Telegram:https://t.me/easytier
|
- Telegram:https://t.me/easytier
|
||||||
|
|
||||||
## 赞助
|
## 赞助 {#sponsor}
|
||||||
|
|
||||||
如果您觉得 EasyTier 对您有所帮助,欢迎赞助我们。
|
如果您觉得 EasyTier 对您有所帮助,欢迎赞助我们。
|
||||||
|
|
||||||
@@ -63,3 +74,5 @@ features:
|
|||||||
<img src="/assets/weixin.png" alt="微信" width="300" style="display: inline-block" />
|
<img src="/assets/weixin.png" alt="微信" width="300" style="display: inline-block" />
|
||||||
<img src="/assets/zhifubao.png" alt="支付宝" width="300" style="display: inline-block; margin-left: 2em"/>
|
<img src="/assets/zhifubao.png" alt="支付宝" width="300" style="display: inline-block; margin-left: 2em"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<Home />
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
export default {
|
||||||
|
load() {
|
||||||
|
return {
|
||||||
|
easytier_latest_version: '2.1.2',
|
||||||
|
github_accels: [
|
||||||
|
'https://ghfast.top/',
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -10,12 +10,17 @@
|
|||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"lint:fix": "eslint . --fix"
|
"lint:fix": "eslint . --fix"
|
||||||
},
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@theojs/lumen": "workspace:*",
|
||||||
|
"typescript": "^5.7.3"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@antfu/eslint-config": "^2.25.1",
|
"@antfu/eslint-config": "3.14.0",
|
||||||
"eslint": "^9.12.0",
|
"eslint": "9.18.0",
|
||||||
"eslint-plugin-format": "^0.1.2",
|
"eslint-plugin-format": "1.0.1",
|
||||||
"mermaid": "^10.9.1",
|
"markdown-it-task-lists": "2.1.1",
|
||||||
"vitepress": "^1.4.1",
|
"mermaid": "11.4.1",
|
||||||
"vitepress-plugin-mermaid": "^2.0.17"
|
"vitepress": "1.5.0",
|
||||||
|
"vitepress-plugin-mermaid": "2.0.17"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
packages:
|
||||||
|
- .
|
||||||
|
- .vitepress/third_party/lumen/src
|
||||||
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 1.5 KiB |