如何以编程方式设置wireguard VPN隧道(用C语言)?

问题描述 投票:0回答:1

我正在尝试使用此单文件 C 库以编程方式设置新的wireguard 客户端并与服务器(10.6.0.1)创建新的 VPN 隧道https://git.zx2c4.com/wireguard-tools/tree /contrib/embeddable-wg-library wirguard.h。以下是我的代码。然而,隧道似乎没有正确建立。

#include <libmnl/libmnl.h>
#include "/home/WG/wireguard.h"

#define SERVER_IP "10.6.0.1"
#define ENDPOINT_IP "192.168.30.209"
#define SERVER_PORT 51820
#define CLIENT_PRIVATE_KEY "private_key_goes_here"
#define CLIENT_PUBLIC_KEY "  public  key goes here  "
#define SERVER_PUBLIC_KEY  "  public  key goes here  "
#define CLIENT_IP "10.6.0.2"  /* Client-side IP address for the WireGuard tunnel*/
#define BUFFER_SIZE 1036

int main() {

    wg_peer new_peer = {
        .flags = WGPEER_HAS_PUBLIC_KEY | WGPEER_REPLACE_ALLOWEDIPS
    };
    wg_device new_device = {
        .name = "wg",
        .listen_port = 51820,
        .flags = WGDEVICE_HAS_PRIVATE_KEY | WGDEVICE_HAS_LISTEN_PORT,
        .first_peer = &new_peer,
        .last_peer = &new_peer

    };
      // Convert base64 strings to binary keys using wg_key_from_base64
    wg_key private_key;
    wg_key public_key;
    wg_key server_public_key;

    if (wg_key_from_base64(private_key, CLIENT_PRIVATE_KEY) < 0) {
        perror("Invalid private key");
        exit(1);
    }

    if (wg_key_from_base64(public_key, CLIENT_PUBLIC_KEY) < 0) {
        perror("Invalid public key");
        exit(1);
    }

     if (wg_key_from_base64(server_public_key, SERVER_PUBLIC_KEY) < 0) {
        perror("Invalid server public key");
        exit(1);
    }

    // Set the public key of the server
    memcpy(new_peer.public_key, server_public_key, sizeof(wg_key));

    // Set the endpoint address and port of the server
    new_peer.endpoint.addr.sa_family = AF_INET;
    if (inet_aton(ENDPOINT_IP, &new_peer.endpoint.addr4.sin_addr) == 0) {
        perror("Invalid server IP address");
        return 1;
    }
    new_peer.endpoint.addr4.sin_port = htons(SERVER_PORT);  
    if (wg_add_device(new_device.name) < 0) {
        perror("Unable to add device");
        exit(1);
    }

  if (wg_set_device(&new_device) < 0) {
    perror("Unable to set device");
        exit(1);
    }

   sleep(3);


  Free the allocated memory before exiting
   free(new_device->name);
   free(new_device);
   free(peer);

return 0;
}

这是以下输出:sudo wg

接口:wg 监听端口:51820

同行:
端点:192.168.30.209:51820 允许的 ips: (无)

在wireshark中,它在底部某处列出了wg接口。当我尝试选择并监听端口时,它显示“wg 设备未启动”。对于 ifconfig 它不显示 wg 界面。
我犯过什么错误吗?我认为这是因为 CLIENT_IP 地址没有正确应用。我正在为此苦苦挣扎。有什么建议吗?

c networking interface vpn wireguard
1个回答
0
投票

嘿,您想学习 Embedde c,请查看我的网站 [https://www.pievcore.com/categories/15/questions] 并下载应用程序 [https://play.google.com/store/apps/details?id =com.piestforum.piforum].

查看此网站特色 - PiEV Core 的教育未来

为所有人解锁知识

只需轻按一下即可轻松获取信息。今天,我们很高兴推出 PiEV Core,这是一款创新的应用程序和网站,旨在为您带来问题与答案的协同作用、民意调查的活力以及前所未有的自由分享想法。

满足你的好奇心

想象一个世界,只要提出问题就可以满足您的好奇心。借助 PiEV Core,这一愿景成为现实。只需点击“提问”按钮,智慧之门就会打开。无论您是要解决复杂的数学问题、深入研究历史事件,还是解开宇宙之谜,我们广泛的专家和学习者社区都随时准备为您提供每一步的指导。

知识的共鸣

除了提出问题之外,您还可以通过提供答案来成为知识的共鸣源。分享您的专业知识,帮助他人克服挑战,并为营造支持性的学习氛围做出贡献。协作学习从未如此吸引人。

激动人心的民意调查

认识到意见的重要性,PiEV Core 将激动人心的民意调查带到您的指尖。表达您的观点,参与热门话题,并更深入地了解他人的观点。教育民主的演变从这里开始。

思想的滋生地

PiEV Core 不仅仅是一个问答和投票平台;这是一个创意蓬勃发展的空间。分享您的想法,引发辩论,并与他人合作,塑造教育及其他领域的新可能性。

可在所有设备上访问

有了 PiEV Core,您的想法就有价值,您的声音就会广泛回响。更好的是,PiEV Core 可以在所有设备上访问。无论您是在旅途中使用智能手机,还是在家里使用计算机放松身心,知识都触手可及。

保持联系,随时随地学习

通过 PiEV Core 保持联系并在方便时学习。感谢您通过 PiEV Core 踏上这段令人难以置信的旅程。我们相信这激起了您的好奇心并激励您成为我们充满活力的社区的一部分。

“更深入地探索:通过 PiEV Core 潜入知识世界!

🌐【了解更多】—探索教育的未来💡【提问】—满足您对知识的渴望🗳️【参与投票】—分享您的观点💬【加入社区】—创意蓬勃发展

发现学习和协作的无限可能性。单击上面的链接,开始使用 PiEV Core 的激动人心的教育之旅。保持联系,保持好奇心! 🚀📚 #PiEVCore #EducationInnovation #LearnWithUs”

© www.soinside.com 2019 - 2024. All rights reserved.