check inner packet srcIP against server-verified srcIP, Windows support

This commit is contained in:
2026-07-24 23:49:42 +02:00
parent 48811df6ed
commit 2b1de6460a
8 changed files with 219 additions and 51 deletions

61
client/os.go Normal file
View File

@@ -0,0 +1,61 @@
//go:build linux || darwin
package main
import (
"os"
"os/exec"
"runtime"
"github.com/songgao/water"
)
var iface *water.Interface
func isAdmin() bool {
return os.Geteuid() == 0
}
func setupInterface() {
config := water.Config{DeviceType: water.TUN}
if runtime.GOOS == "linux" {
config.Name = "baalvpn"
} else {
panic("TODO")
}
var err error
iface, err = water.New(config)
if err != nil {
panic(err)
}
if runtime.GOOS == "linux" {
if err := exec.Command("ip", "addr", "add", internalIP.String()+"/32", "dev", "baalvpn").Run(); err != nil {
panic(err)
}
if err := exec.Command("ip", "link", "set", "dev", "baalvpn", "up").Run(); err != nil {
panic(err)
}
} else {
if err := exec.Command("ifconfig", iface.Name(), "inet6", internalIP.String(), internalIP.String(), "prefixlen", "128", "up").Run(); err != nil {
panic(err)
}
}
}
func writePkt(pkt []byte) error {
_, err := iface.Write(pkt)
return err
}
func readPkt() ([]byte, error) {
pkt := make([]byte, 2000)
n, err := iface.Read(pkt)
if err != nil {
return nil, err
}
return pkt[:n], nil
}
func releasePkt(pkt []byte) {}