mirror of
https://github.com/juanfont/headscale.git
synced 2025-01-19 02:10:04 +09:00
Fix typos
Some checks failed
Build / build-cross (GOARCH=arm64 GOOS=darwin) (push) Has been cancelled
Build / build-cross (GOARCH=arm64 GOOS=linux) (push) Has been cancelled
Build / build-nix (push) Has been cancelled
Build / build-cross (GOARCH=386 GOOS=linux) (push) Has been cancelled
Build / build-cross (GOARCH=amd64 GOOS=darwin) (push) Has been cancelled
Build / build-cross (GOARCH=amd64 GOOS=linux) (push) Has been cancelled
Build / build-cross (GOARCH=arm GOOS=linux GOARM=5) (push) Has been cancelled
Build / build-cross (GOARCH=arm GOOS=linux GOARM=6) (push) Has been cancelled
Build / build-cross (GOARCH=arm GOOS=linux GOARM=7) (push) Has been cancelled
Deploy docs / deploy (push) Has been cancelled
Tests / test (push) Has been cancelled
Some checks failed
Build / build-cross (GOARCH=arm64 GOOS=darwin) (push) Has been cancelled
Build / build-cross (GOARCH=arm64 GOOS=linux) (push) Has been cancelled
Build / build-nix (push) Has been cancelled
Build / build-cross (GOARCH=386 GOOS=linux) (push) Has been cancelled
Build / build-cross (GOARCH=amd64 GOOS=darwin) (push) Has been cancelled
Build / build-cross (GOARCH=amd64 GOOS=linux) (push) Has been cancelled
Build / build-cross (GOARCH=arm GOOS=linux GOARM=5) (push) Has been cancelled
Build / build-cross (GOARCH=arm GOOS=linux GOARM=6) (push) Has been cancelled
Build / build-cross (GOARCH=arm GOOS=linux GOARM=7) (push) Has been cancelled
Deploy docs / deploy (push) Has been cancelled
Tests / test (push) Has been cancelled
This commit is contained in:
parent
fa641e38b8
commit
ede4f97a16
12 changed files with 22 additions and 22 deletions
|
@ -153,7 +153,7 @@ This will also affect the way you
|
||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
|
|
||||||
- Improved compatibilty of built-in DERP server with clients connecting over
|
- Improved compatibility of built-in DERP server with clients connecting over
|
||||||
WebSocket [#2132](https://github.com/juanfont/headscale/pull/2132)
|
WebSocket [#2132](https://github.com/juanfont/headscale/pull/2132)
|
||||||
- Allow nodes to use SSH agent forwarding
|
- Allow nodes to use SSH agent forwarding
|
||||||
[#2145](https://github.com/juanfont/headscale/pull/2145)
|
[#2145](https://github.com/juanfont/headscale/pull/2145)
|
||||||
|
@ -262,7 +262,7 @@ part of adopting [#1460](https://github.com/juanfont/headscale/pull/1460).
|
||||||
- `prefixes.allocation` can be set to assign IPs at `sequential` or `random`.
|
- `prefixes.allocation` can be set to assign IPs at `sequential` or `random`.
|
||||||
[#1869](https://github.com/juanfont/headscale/pull/1869)
|
[#1869](https://github.com/juanfont/headscale/pull/1869)
|
||||||
- MagicDNS domains no longer contain usernames []()
|
- MagicDNS domains no longer contain usernames []()
|
||||||
- This is in preperation to fix Headscales implementation of tags which
|
- This is in preparation to fix Headscales implementation of tags which
|
||||||
currently does not correctly remove the link between a tagged device and a
|
currently does not correctly remove the link between a tagged device and a
|
||||||
user. As tagged devices will not have a user, this will require a change to
|
user. As tagged devices will not have a user, this will require a change to
|
||||||
the DNS generation, removing the username, see
|
the DNS generation, removing the username, see
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
# DNS
|
# DNS
|
||||||
|
|
||||||
Headscale supports [most DNS features](../about/features.md) from Tailscale. DNS releated settings can be configured
|
Headscale supports [most DNS features](../about/features.md) from Tailscale. DNS related settings can be configured
|
||||||
within `dns` section of the [configuration file](./configuration.md).
|
within `dns` section of the [configuration file](./configuration.md).
|
||||||
|
|
||||||
## Setting extra DNS records
|
## Setting extra DNS records
|
||||||
|
|
||||||
Headscale allows to set extra DNS records which are made available via
|
Headscale allows to set extra DNS records which are made available via
|
||||||
[MagicDNS](https://tailscale.com/kb/1081/magicdns). Extra DNS records can be configured either via static entries in the
|
[MagicDNS](https://tailscale.com/kb/1081/magicdns). Extra DNS records can be configured either via static entries in the
|
||||||
[configuration file](./configuration.md) or from a JSON file that Headscale continously watches for changes:
|
[configuration file](./configuration.md) or from a JSON file that Headscale continuously watches for changes:
|
||||||
|
|
||||||
* Use the `dns.extra_records` option in the [configuration file](./configuration.md) for entries that are static and
|
* Use the `dns.extra_records` option in the [configuration file](./configuration.md) for entries that are static and
|
||||||
don't change while Headscale is running. Those entries are processed when Headscale is starting up and changes to the
|
don't change while Headscale is running. Those entries are processed when Headscale is starting up and changes to the
|
||||||
|
|
|
@ -11,7 +11,7 @@ Headscale doesn't provide a built-in web interface but users may pick one from t
|
||||||
| --------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
| --------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
||||||
| headscale-webui | [Github](https://github.com/ifargle/headscale-webui) | A simple headscale web UI for small-scale deployments. |
|
| headscale-webui | [Github](https://github.com/ifargle/headscale-webui) | A simple headscale web UI for small-scale deployments. |
|
||||||
| headscale-ui | [Github](https://github.com/gurucomputing/headscale-ui) | A web frontend for the headscale Tailscale-compatible coordination server |
|
| headscale-ui | [Github](https://github.com/gurucomputing/headscale-ui) | A web frontend for the headscale Tailscale-compatible coordination server |
|
||||||
| HeadscaleUi | [GitHub](https://github.com/simcu/headscale-ui) | A static headscale admin ui, no backend enviroment required |
|
| HeadscaleUi | [GitHub](https://github.com/simcu/headscale-ui) | A static headscale admin ui, no backend environment required |
|
||||||
| Headplane | [GitHub](https://github.com/tale/headplane) | An advanced Tailscale inspired frontend for headscale |
|
| Headplane | [GitHub](https://github.com/tale/headplane) | An advanced Tailscale inspired frontend for headscale |
|
||||||
| headscale-admin | [Github](https://github.com/GoodiesHQ/headscale-admin) | Headscale-Admin is meant to be a simple, modern web interface for headscale |
|
| headscale-admin | [Github](https://github.com/GoodiesHQ/headscale-admin) | Headscale-Admin is meant to be a simple, modern web interface for headscale |
|
||||||
| ouroboros | [Github](https://github.com/yellowsink/ouroboros) | Ouroboros is designed for users to manage their own devices, rather than for admins |
|
| ouroboros | [Github](https://github.com/yellowsink/ouroboros) | Ouroboros is designed for users to manage their own devices, rather than for admins |
|
||||||
|
|
|
@ -16,7 +16,7 @@ README](https://github.com/juanfont/headscale#contributing) for more information
|
||||||
### Install from source
|
### Install from source
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# Install prerequistes
|
# Install prerequisites
|
||||||
pkg_add go
|
pkg_add go
|
||||||
|
|
||||||
git clone https://github.com/juanfont/headscale.git
|
git clone https://github.com/juanfont/headscale.git
|
||||||
|
@ -42,7 +42,7 @@ cp headscale /usr/local/sbin
|
||||||
### Install from source via cross compile
|
### Install from source via cross compile
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# Install prerequistes
|
# Install prerequisites
|
||||||
# 1. go v1.20+: headscale newer than 0.21 needs go 1.20+ to compile
|
# 1. go v1.20+: headscale newer than 0.21 needs go 1.20+ to compile
|
||||||
# 2. gmake: Makefile in the headscale repo is written in GNU make syntax
|
# 2. gmake: Makefile in the headscale repo is written in GNU make syntax
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
checkFlags = ["-short"];
|
checkFlags = ["-short"];
|
||||||
|
|
||||||
# When updating go.mod or go.sum, a new sha will need to be calculated,
|
# When updating go.mod or go.sum, a new sha will need to be calculated,
|
||||||
# update this if you have a mismatch after doing a change to thos files.
|
# update this if you have a mismatch after doing a change to those files.
|
||||||
vendorHash = "sha256-SBfeixT8DQOrK2SWmHHSOBtzRdSZs+pwomHpw6Jd+qc=";
|
vendorHash = "sha256-SBfeixT8DQOrK2SWmHHSOBtzRdSZs+pwomHpw6Jd+qc=";
|
||||||
|
|
||||||
subPackages = ["cmd/headscale"];
|
subPackages = ["cmd/headscale"];
|
||||||
|
|
|
@ -245,7 +245,7 @@ func RenameNode(tx *gorm.DB,
|
||||||
return fmt.Errorf("renaming node: %w", err)
|
return fmt.Errorf("renaming node: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
uniq, err := isUnqiueName(tx, newName)
|
uniq, err := isUniqueName(tx, newName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("checking if name is unique: %w", err)
|
return fmt.Errorf("checking if name is unique: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -630,7 +630,7 @@ func generateGivenName(suppliedName string, randomSuffix bool) (string, error) {
|
||||||
return suppliedName, nil
|
return suppliedName, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func isUnqiueName(tx *gorm.DB, name string) (bool, error) {
|
func isUniqueName(tx *gorm.DB, name string) (bool, error) {
|
||||||
nodes := types.Nodes{}
|
nodes := types.Nodes{}
|
||||||
if err := tx.
|
if err := tx.
|
||||||
Where("given_name = ?", name).Find(&nodes).Error; err != nil {
|
Where("given_name = ?", name).Find(&nodes).Error; err != nil {
|
||||||
|
@ -649,7 +649,7 @@ func ensureUniqueGivenName(
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
unique, err := isUnqiueName(tx, givenName)
|
unique, err := isUniqueName(tx, givenName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
|
@ -417,10 +417,10 @@ func SaveNodeRoutes(tx *gorm.DB, node *types.Node) (bool, error) {
|
||||||
return sendUpdate, nil
|
return sendUpdate, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// FailoverNodeRoutesIfNeccessary takes a node and checks if the node's route
|
// FailoverNodeRoutesIfNecessary takes a node and checks if the node's route
|
||||||
// need to be failed over to another host.
|
// need to be failed over to another host.
|
||||||
// If needed, the failover will be attempted.
|
// If needed, the failover will be attempted.
|
||||||
func FailoverNodeRoutesIfNeccessary(
|
func FailoverNodeRoutesIfNecessary(
|
||||||
tx *gorm.DB,
|
tx *gorm.DB,
|
||||||
isLikelyConnected *xsync.MapOf[types.NodeID, bool],
|
isLikelyConnected *xsync.MapOf[types.NodeID, bool],
|
||||||
node *types.Node,
|
node *types.Node,
|
||||||
|
@ -473,7 +473,7 @@ nodeRouteLoop:
|
||||||
return &types.StateUpdate{
|
return &types.StateUpdate{
|
||||||
Type: types.StatePeerChanged,
|
Type: types.StatePeerChanged,
|
||||||
ChangeNodes: chng,
|
ChangeNodes: chng,
|
||||||
Message: "called from db.FailoverNodeRoutesIfNeccessary",
|
Message: "called from db.FailoverNodeRoutesIfNecessary",
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -342,7 +342,7 @@ func dbForTest(t *testing.T, testName string) *HSDatabase {
|
||||||
return db
|
return db
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFailoverNodeRoutesIfNeccessary(t *testing.T) {
|
func TestFailoverNodeRoutesIfNecessary(t *testing.T) {
|
||||||
su := func(nids ...types.NodeID) *types.StateUpdate {
|
su := func(nids ...types.NodeID) *types.StateUpdate {
|
||||||
return &types.StateUpdate{
|
return &types.StateUpdate{
|
||||||
ChangeNodes: nids,
|
ChangeNodes: nids,
|
||||||
|
@ -648,7 +648,7 @@ func TestFailoverNodeRoutesIfNeccessary(t *testing.T) {
|
||||||
want := tt.want[step]
|
want := tt.want[step]
|
||||||
|
|
||||||
got, err := Write(db.DB, func(tx *gorm.DB) (*types.StateUpdate, error) {
|
got, err := Write(db.DB, func(tx *gorm.DB) (*types.StateUpdate, error) {
|
||||||
return FailoverNodeRoutesIfNeccessary(tx, smap(isConnected), node)
|
return FailoverNodeRoutesIfNecessary(tx, smap(isConnected), node)
|
||||||
})
|
})
|
||||||
|
|
||||||
if (err != nil) != tt.wantErr {
|
if (err != nil) != tt.wantErr {
|
||||||
|
|
|
@ -243,7 +243,7 @@ func (n *Notifier) sendAll(update types.StateUpdate) {
|
||||||
// has shut down the channel and is waiting for the lock held here in RemoveNode.
|
// has shut down the channel and is waiting for the lock held here in RemoveNode.
|
||||||
// This means that there is potential for a deadlock which would stop all updates
|
// This means that there is potential for a deadlock which would stop all updates
|
||||||
// going out to clients. This timeout prevents that from happening by moving on to the
|
// going out to clients. This timeout prevents that from happening by moving on to the
|
||||||
// next node if the context is cancelled. Afther sendAll releases the lock, the add/remove
|
// next node if the context is cancelled. After sendAll releases the lock, the add/remove
|
||||||
// call will succeed and the update will go to the correct nodes on the next call.
|
// call will succeed and the update will go to the correct nodes on the next call.
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), n.cfg.Tuning.NotifierSendTimeout)
|
ctx, cancel := context.WithTimeout(context.Background(), n.cfg.Tuning.NotifierSendTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
|
@ -62,7 +62,7 @@ func theInternet() *netipx.IPSet {
|
||||||
internetBuilder.RemovePrefix(tsaddr.CGNATRange())
|
internetBuilder.RemovePrefix(tsaddr.CGNATRange())
|
||||||
|
|
||||||
// Delete "cant find DHCP networks"
|
// Delete "cant find DHCP networks"
|
||||||
internetBuilder.RemovePrefix(netip.MustParsePrefix("fe80::/10")) // link-loca
|
internetBuilder.RemovePrefix(netip.MustParsePrefix("fe80::/10")) // link-local
|
||||||
internetBuilder.RemovePrefix(netip.MustParsePrefix("169.254.0.0/16"))
|
internetBuilder.RemovePrefix(netip.MustParsePrefix("169.254.0.0/16"))
|
||||||
|
|
||||||
theInternetSet, _ := internetBuilder.IPSet()
|
theInternetSet, _ := internetBuilder.IPSet()
|
||||||
|
|
|
@ -387,7 +387,7 @@ func (m *mapSession) serveLongPoll() {
|
||||||
|
|
||||||
func (m *mapSession) pollFailoverRoutes(where string, node *types.Node) {
|
func (m *mapSession) pollFailoverRoutes(where string, node *types.Node) {
|
||||||
update, err := db.Write(m.h.db.DB, func(tx *gorm.DB) (*types.StateUpdate, error) {
|
update, err := db.Write(m.h.db.DB, func(tx *gorm.DB) (*types.StateUpdate, error) {
|
||||||
return db.FailoverNodeRoutesIfNeccessary(tx, m.h.nodeNotifier.LikelyConnectedMap(), node)
|
return db.FailoverNodeRoutesIfNecessary(tx, m.h.nodeNotifier.LikelyConnectedMap(), node)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
m.errf(err, fmt.Sprintf("failed to ensure failover routes, %s", where))
|
m.errf(err, fmt.Sprintf("failed to ensure failover routes, %s", where))
|
||||||
|
@ -453,7 +453,7 @@ func (m *mapSession) handleEndpointUpdate() {
|
||||||
// If there is no NetInfo, keep the previous one.
|
// If there is no NetInfo, keep the previous one.
|
||||||
// From 1.66 the client only sends it if changed:
|
// From 1.66 the client only sends it if changed:
|
||||||
// https://github.com/tailscale/tailscale/commit/e1011f138737286ecf5123ff887a7a5800d129a2
|
// https://github.com/tailscale/tailscale/commit/e1011f138737286ecf5123ff887a7a5800d129a2
|
||||||
// TODO(kradalby): evaulate if we need better comparing of hostinfo
|
// TODO(kradalby): evaluate if we need better comparing of hostinfo
|
||||||
// before we take the changes.
|
// before we take the changes.
|
||||||
if m.req.Hostinfo.NetInfo == nil && m.node.Hostinfo != nil {
|
if m.req.Hostinfo.NetInfo == nil && m.node.Hostinfo != nil {
|
||||||
m.req.Hostinfo.NetInfo = m.node.Hostinfo.NetInfo
|
m.req.Hostinfo.NetInfo = m.node.Hostinfo.NetInfo
|
||||||
|
|
|
@ -617,7 +617,7 @@ func dns() (DNSConfig, error) {
|
||||||
// UnmarshalKey is compatible with Environment Variables.
|
// UnmarshalKey is compatible with Environment Variables.
|
||||||
// err := viper.UnmarshalKey("dns", &dns)
|
// err := viper.UnmarshalKey("dns", &dns)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// return DNSConfig{}, fmt.Errorf("unmarshaling dns config: %w", err)
|
// return DNSConfig{}, fmt.Errorf("unmarshalling dns config: %w", err)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
dns.MagicDNS = viper.GetBool("dns.magic_dns")
|
dns.MagicDNS = viper.GetBool("dns.magic_dns")
|
||||||
|
@ -632,7 +632,7 @@ func dns() (DNSConfig, error) {
|
||||||
|
|
||||||
err := viper.UnmarshalKey("dns.extra_records", &extraRecords)
|
err := viper.UnmarshalKey("dns.extra_records", &extraRecords)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return DNSConfig{}, fmt.Errorf("unmarshaling dns extra records: %w", err)
|
return DNSConfig{}, fmt.Errorf("unmarshalling dns extra records: %w", err)
|
||||||
}
|
}
|
||||||
dns.ExtraRecords = extraRecords
|
dns.ExtraRecords = extraRecords
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue