add test for ipv6 wireguard vpn portal (#1408)

This commit is contained in:
Sijie.Sun
2025-09-25 08:24:56 +08:00
committed by GitHub
parent 67abf4446d
commit 7a694257d9
2 changed files with 37 additions and 21 deletions

View File

@@ -25,7 +25,7 @@ pub fn del_netns(name: &str) {
.output(); .output();
} }
pub fn create_netns(name: &str, ipv4: &str) { pub fn create_netns(name: &str, ipv4: &str, ipv6: &str) {
// create netns // create netns
let _ = std::process::Command::new("ip") let _ = std::process::Command::new("ip")
.args(["netns", "add", name]) .args(["netns", "add", name])
@@ -76,20 +76,22 @@ pub fn create_netns(name: &str, ipv4: &str) {
.output() .output()
.unwrap(); .unwrap();
let _ = std::process::Command::new("ip") for ip in [ipv4, ipv6] {
.args([ let _ = std::process::Command::new("ip")
"netns", .args([
"exec", "netns",
name, "exec",
"ip", name,
"addr", "ip",
"add", "addr",
ipv4, "add",
"dev", ip,
get_guest_veth_name(name), "dev",
]) get_guest_veth_name(name),
.output() ])
.unwrap(); .output()
.unwrap();
}
} }
pub fn prepare_bridge(name: &str) { pub fn prepare_bridge(name: &str) {

View File

@@ -40,10 +40,10 @@ pub fn prepare_linux_namespaces() {
del_netns("net_c"); del_netns("net_c");
del_netns("net_d"); del_netns("net_d");
create_netns("net_a", "10.1.1.1/24"); create_netns("net_a", "10.1.1.1/24", "fd11::1/64");
create_netns("net_b", "10.1.1.2/24"); create_netns("net_b", "10.1.1.2/24", "fd11::2/64");
create_netns("net_c", "10.1.2.3/24"); create_netns("net_c", "10.1.2.3/24", "fd12::3/64");
create_netns("net_d", "10.1.2.4/24"); create_netns("net_d", "10.1.2.4/24", "fd12::4/64");
prepare_bridge("br_a"); prepare_bridge("br_a");
prepare_bridge("br_b"); prepare_bridge("br_b");
@@ -931,10 +931,18 @@ fn run_wireguard_client(
} }
#[cfg(feature = "wireguard")] #[cfg(feature = "wireguard")]
#[rstest::rstest]
#[tokio::test] #[tokio::test]
#[serial_test::serial] #[serial_test::serial]
pub async fn wireguard_vpn_portal() { pub async fn wireguard_vpn_portal(#[values(true, false)] test_v6: bool) {
let mut insts = init_three_node("tcp").await; let mut insts = init_three_node("tcp").await;
if test_v6 {
ping6_test("net_d", "fd12::3", None).await;
} else {
ping_test("net_d", "10.1.2.3", None).await;
}
let net_ns = NetNS::new(Some("net_d".into())); let net_ns = NetNS::new(Some("net_d".into()));
let _g = net_ns.guard(); let _g = net_ns.guard();
insts[2] insts[2]
@@ -946,11 +954,17 @@ pub async fn wireguard_vpn_portal() {
}); });
insts[2].run_vpn_portal().await.unwrap(); insts[2].run_vpn_portal().await.unwrap();
let dst_socket_addr = if test_v6 {
"[fd12::3]:22121".parse().unwrap()
} else {
"10.1.2.3:22121".parse().unwrap()
};
let net_ns = NetNS::new(Some("net_d".into())); let net_ns = NetNS::new(Some("net_d".into()));
let _g = net_ns.guard(); let _g = net_ns.guard();
let wg_cfg = get_wg_config_for_portal(&insts[2].get_global_ctx().get_network_identity()); let wg_cfg = get_wg_config_for_portal(&insts[2].get_global_ctx().get_network_identity());
run_wireguard_client( run_wireguard_client(
"10.1.2.3:22121".parse().unwrap(), dst_socket_addr,
Key::try_from(wg_cfg.my_public_key()).unwrap(), Key::try_from(wg_cfg.my_public_key()).unwrap(),
Key::try_from(wg_cfg.peer_secret_key()).unwrap(), Key::try_from(wg_cfg.peer_secret_key()).unwrap(),
vec!["10.14.14.0/24".to_string(), "10.144.144.0/24".to_string()], vec!["10.14.14.0/24".to_string(), "10.144.144.0/24".to_string()],