diff --git a/.github/workflows/gui.yml b/.github/workflows/gui.yml index ffa6be9..caa7820 100644 --- a/.github/workflows/gui.yml +++ b/.github/workflows/gui.yml @@ -152,13 +152,8 @@ jobs: sudo dpkg --add-architecture arm64 sudo apt-get update - sudo apt-get install -y libgstreamer1.0-0:arm64 - sudo apt-get install -y gstreamer1.0-plugins-base:arm64 - sudo apt-get install -y gstreamer1.0-plugins-good:arm64 - sudo apt-get install -y libgstreamer-gl1.0-0:arm64 - sudo apt-get install -y libgstreamer-plugins-base1.0-0:arm64 - sudo apt-get install -y libgstreamer-plugins-good1.0-0:arm64 - sudo apt-get install -y libwebkit2gtk-4.1-0:arm64 + sudo apt-get install -y libgstreamer1.0-0:arm64 gstreamer1.0-plugins-base:arm64 gstreamer1.0-plugins-good:arm64 + sudo apt-get install -y libgstreamer-gl1.0-0:arm64 libgstreamer-plugins-base1.0-0:arm64 libgstreamer-plugins-good1.0-0:arm64 libwebkit2gtk-4.1-0:arm64 sudo apt install -f -o Dpkg::Options::="--force-overwrite" libwebkit2gtk-4.1-dev:arm64 libssl-dev:arm64 gcc-aarch64-linux-gnu echo "PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/" >> "$GITHUB_ENV" echo "PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig/" >> "$GITHUB_ENV" diff --git a/easytier-web/frontend/src/components/Login.vue b/easytier-web/frontend/src/components/Login.vue index fb17a44..44573c4 100644 --- a/easytier-web/frontend/src/components/Login.vue +++ b/easytier-web/frontend/src/components/Login.vue @@ -47,7 +47,7 @@ const onRegister = async () => { } }; -const defaultApiHost = 'http://47.115.208.211:11211' +const defaultApiHost = 'http://easytier.cn:11211' const apiHost = ref(defaultApiHost) const apiHostSuggestions = ref>([]) const apiHostSearch = async (event: { query: string }) => { diff --git a/easytier/locales/app.yml b/easytier/locales/app.yml index 7471da3..b525968 100644 --- a/easytier/locales/app.yml +++ b/easytier/locales/app.yml @@ -1,6 +1,15 @@ _version: 2 core_clap: + config_server: + en: |+ + config server address, allow format: + full url: --config-server udp://127.0.0.1:22020/admin + only user name: --config-server admin + zh-CN: |+ + 配置服务器地址。允许格式: + 完整URL:--config-server udp://127.0.0.1:22020/admin + 仅用户名:--config-server admin config_file: en: "path to the config file, NOTE: if this is set, all other options will be ignored" zh-CN: "配置文件路径,注意:如果设置了这个选项,其他所有选项都将被忽略" diff --git a/easytier/src/connector/udp_hole_punch/common.rs b/easytier/src/connector/udp_hole_punch/common.rs index 2c6637b..11cbd06 100644 --- a/easytier/src/connector/udp_hole_punch/common.rs +++ b/easytier/src/connector/udp_hole_punch/common.rs @@ -26,7 +26,7 @@ use crate::{ }, }; -pub(crate) const HOLE_PUNCH_PACKET_BODY_LEN: u16 = 32; +pub(crate) const HOLE_PUNCH_PACKET_BODY_LEN: u16 = 16; fn generate_shuffled_port_vec() -> Vec { let mut rng = rand::thread_rng(); diff --git a/easytier/src/easytier-core.rs b/easytier/src/easytier-core.rs index 29479e3..40c799a 100644 --- a/easytier/src/easytier-core.rs +++ b/easytier/src/easytier-core.rs @@ -783,12 +783,9 @@ async fn run_main(cli: Cli) -> anyhow::Result<()> { let config_server_url_s = cli.config_server.clone().unwrap(); let config_server_url = match url::Url::parse(&config_server_url_s) { Ok(u) => u, - Err(_) => format!( - "udp://config-server.easytier.top:22020/{}", - config_server_url_s - ) - .parse() - .unwrap(), + Err(_) => format!("udp://easytier.cn:22020/{}", config_server_url_s) + .parse() + .unwrap(), }; let mut c_url = config_server_url.clone(); diff --git a/easytier/src/peers/peer_manager.rs b/easytier/src/peers/peer_manager.rs index 0a60389..905fc72 100644 --- a/easytier/src/peers/peer_manager.rs +++ b/easytier/src/peers/peer_manager.rs @@ -79,7 +79,12 @@ impl PeerRpcManagerTransport for RpcTransport { async fn send(&self, mut msg: ZCPacket, dst_peer_id: PeerId) -> Result<(), Error> { let peers = self.peers.upgrade().ok_or(Error::Unknown)?; - if !peers.need_relay_by_foreign_network(dst_peer_id).await? { + // NOTE: if route info is not exchanged, this will return error. treat it as need relay + if !peers + .need_relay_by_foreign_network(dst_peer_id) + .await + .unwrap_or(true) + { self.encryptor .encrypt(&mut msg) .with_context(|| "encrypt failed")?; @@ -706,6 +711,9 @@ impl PeerManager { ); Err(Error::RouteError(None)) } + } else if foreign_network_client.has_next_hop(dst_peer_id) { + // check foreign network again. so in happy path we can avoid extra check + foreign_network_client.send_msg(msg, dst_peer_id).await } else { tracing::debug!(?dst_peer_id, "no gateway for peer"); Err(Error::RouteError(None)) diff --git a/easytier/src/peers/peer_ospf_route.rs b/easytier/src/peers/peer_ospf_route.rs index 9b02b00..8e82f21 100644 --- a/easytier/src/peers/peer_ospf_route.rs +++ b/easytier/src/peers/peer_ospf_route.rs @@ -1395,7 +1395,7 @@ impl PeerRouteServiceImpl { let my_peer_id = self.my_peer_id; let (peer_infos, conn_bitmap, foreign_network) = self.build_sync_request(&session); - tracing::info!(?foreign_network, "building sync_route request. my_id {:?}, pper_id: {:?}, peer_infos: {:?}, conn_bitmap: {:?}, synced_route_info: {:?} session: {:?}", + tracing::trace!(?foreign_network, "building sync_route request. my_id {:?}, pper_id: {:?}, peer_infos: {:?}, conn_bitmap: {:?}, synced_route_info: {:?} session: {:?}", my_peer_id, dst_peer_id, peer_infos, conn_bitmap, self.synced_route_info, session); if peer_infos.is_none() @@ -1683,7 +1683,7 @@ impl RouteSessionManager { .map(|x| *x) .collect::>(); - tracing::debug!(?service_impl.my_peer_id, ?peers, ?session_peers, ?initiator_candidates, "maintain_sessions begin"); + tracing::trace!(?service_impl.my_peer_id, ?peers, ?session_peers, ?initiator_candidates, "maintain_sessions begin"); if initiator_candidates.is_empty() { next_sleep_ms = 1000; diff --git a/easytier/src/tunnel/udp.rs b/easytier/src/tunnel/udp.rs index 9a60501..07c5d46 100644 --- a/easytier/src/tunnel/udp.rs +++ b/easytier/src/tunnel/udp.rs @@ -658,7 +658,7 @@ impl UdpTunnelConnector { return; } _ = udp_recv_from_socket_forward_task(socket_clone,false, |zc_packet, addr| { - tracing::debug!(?addr, "connector udp forward task done"); + tracing::trace!(?addr, "connector udp forward task done"); if let Err(e) = udp_conn.handle_packet_from_remote(zc_packet) { tracing::trace!(?e, ?addr, "udp forward packet error"); } diff --git a/script/install.sh b/script/install.sh index 02ac2cc..2ad6cf6 100644 --- a/script/install.sh +++ b/script/install.sh @@ -193,12 +193,13 @@ listeners = [ "wss://0.0.0.0:11012/", ] exit_nodes = [] -peer = [] -rpc_portal = "0.0.0.0:15888" + +[[peer]] +uri = "tcp://public.easytier.top:11010" [network_identity] network_name = "default" -network_secret = "" +network_secret = "default" [flags] default_protocol = "udp" @@ -213,6 +214,8 @@ use_smoltcp = false foreign_network_whitelist = "*" disable_p2p = false relay_all_peer_rpc = false +disable_udp_hole_punching = false + EOF # Create systemd @@ -221,11 +224,14 @@ EOF Description=EasyTier Service Wants=network.target After=network.target network.service +StartLimitIntervalSec=0 [Service] Type=simple WorkingDirectory=$INSTALL_PATH ExecStart=$INSTALL_PATH/easytier-core -c $INSTALL_PATH/config/%i.conf +Restart=always +RestartSec=1s [Install] WantedBy=multi-user.target