> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siderolabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Wireguard

> Learn how to configure Wireguard link.

export const VersionWarningBanner = () => {
  const latestVersion = "v1.13";
  const [latestUrl, setLatestUrl] = useState(null);
  const [currentVersion, setCurrentVersion] = useState(null);
  const [isBeta, setIsBeta] = useState(false);
  const parseVersion = v => v.replace("v", "").split(".").map(Number);
  const isGreaterVersion = (a, b) => {
    const [aMajor, aMinor] = parseVersion(a);
    const [bMajor, bMinor] = parseVersion(b);
    if (aMajor > bMajor) return true;
    if (aMajor === bMajor && aMinor > bMinor) return true;
    return false;
  };
  useEffect(() => {
    if (typeof window === "undefined") return;
    const {pathname, hash, search} = window.location;
    const match = pathname.match(/\/talos\/(v\d+\.\d+)\//);
    if (!match) return;
    const detectedVersion = match[1];
    if (detectedVersion === latestVersion) return;
    setCurrentVersion(detectedVersion);
    if (isGreaterVersion(detectedVersion, latestVersion)) {
      setIsBeta(true);
    }
    const newPath = pathname.replace(`/talos/${detectedVersion}/`, `/talos/${latestVersion}/`);
    setLatestUrl(`${newPath}${search}${hash}`);
  }, []);
  if (!latestUrl || !currentVersion) return null;
  return <div className="not-prose sticky top-6 z-50 my-6">
      <div className="border border-yellow-500/30 bg-yellow-500/10 px-4 py-3 rounded-xl">
        <div className="text-sm">
          {isBeta ? <>
              ⚠️ You are viewing a <strong>beta version</strong> of Talos ({currentVersion}).
              This version may be unstable.
              <a href={latestUrl} className="ml-2 underline text-yellow-400 hover:text-yellow-300 font-medium">
                View latest stable version {latestVersion} →
              </a>
            </> : <>
              ⚠️ You are viewing an older version of Talos ({currentVersion}).
              <a href={latestUrl} className="ml-2 underline text-yellow-400 hover:text-yellow-300 font-medium">
                View the latest version {latestVersion} →
              </a>
            </>}
        </div>
      </div>
    </div>;
};

<VersionWarningBanner />

See this official Wireguard [quick start tutorial](https://www.wireguard.com/quickstart/) to understand the basic concepts.

For each machine, generate a public/private key pair:

```bash theme={null}
wg genkey | tee privatekey | wg pubkey > publickey
```

Wireguard network requires a set of overlay addresses that will be used by Wireguard interfaces on each machine ([WireguardConfig](../../reference/configuration/network/wireguardconfig)).
For example, you can use the `10.0.0.0/24` network for overlay addresses (if this network does not conflict with your existing networks).

```yaml theme={null}
apiVersion: v1alpha1
kind: WireguardConfig
name: wg.int
privateKey: GA1E1VB+g41Dl0+UH2TMW9C5953y+moVg6JIIqkJbmw= # private key of this machine
listenPort: 5042 # optional
peers:
    - publicKey: 735jkJdcVDninU5PzLJ/S+bfN6Q3QOk6svWrVLMJQAk= # public key of another machine
      allowedIPs:
        - 10.0.0.2/32 # overlay address of another machine
      endpoint: 192.168.1.2:5042 # endpoint to connect to, only one of the peers needs to specify this
    - publicKey: uvdlJNva1X8/OCOZM+0gGT4Yu9x20odd3AWbbQUF7nM= # public key of yet another machine
      allowedIPs:
        - 10.0.0.3/32 # overlay address of yet another machine
up: true
addresses:
    - address: 10.0.0.1/32 # overlay address of this machine
```

This configuration creates a Wireguard interface named `wg.int` with the overlay address `10.0.0.1/32`, if applied on all machines,
the machines will be able to communicate with each other over the Wireguard network using the overlay addresses.

If you want to route specific networks over the Wireguard interface, you need to set up routing accordingly.

See [KubeSpan](./../kubespan) for a way to make Talos Linux set up Wireguard overlay mesh network automatically across the cluster.
