Detach a reserved public IP from one VM, attach it to another, without changing the IP itself — useful for blue/green deploys, failover, and partner-whitelist preservation
Updated May 8, 2026A reserved IP can be moved from one VM to another without changing the address. Detach it from VM A, attach it to VM B — the IP stays the same, your DNS records stay valid, partner whitelists stay correct, and the only thing that changes is which server traffic lands on. This is the standard pattern for blue/green deploys, manual failover, and “promote a candidate VM by repointing the IP” workflows.This page covers reserved IPs only. Auto-assigned IPs cannot be moved — when you detach an auto-assigned IP, it returns to the regional pool and may be allocated to someone else. If you need this workflow, reserve an IP first.
A reserved IP — the Type column on the Public IPs tab will say “Reserved” (not “VM” or “Gateway”)
A target VM in the same region as the IP — IPs are region-locked
The target VM should not already have a public IP of the same type (IPv4 ↔ IPv4, IPv6 ↔ IPv6) — remove its existing one first, or assign the moved IP to the IPv6 slot if it’s free
Click Remove Public IP on the IP’s card. Confirm the dialog (it shows “reserved IP — will stay in your account”).
Networking → Public IPs
Find the IP’s row, click ⋮ → Detach from VM.
Networking diagram
Click the blue IP chip floating above the source VM → Detach from VM.
The IP detaches in seconds. On the Public IPs tab, the row’s Assigned To column now reads — (or Unassigned) and the IP is ready to re-attach.The address stays the same. Active SSH/RDP/HTTP sessions to the IP drop because they’re now hitting nothing — that’s expected. DNS records pointing at this IP keep resolving correctly; they just temporarily don’t have a backend until you complete step 2.
2. Check the target VM — and remove any existing public IP of the same type first
The target VM must not already have a public IP of the same type (IPv4 or IPv6). A VM holds at most one public IPv4 and one public IPv6 from the dashboard — if you try to attach a reserved IPv4 to a VM that already has an IPv4 (auto-assigned or reserved), the attach is rejected with VM already has an IPv4. Same rule for IPv6.Open the target VM’s detail page → Network tab. If the IPv4 (or IPv6) card already shows an address, click Remove Public IP on that card before moving on to the attach step:
Two important nuances:
Auto-assigned IP on the target → Remove returns it to the pool, permanently. You won’t get the same address back. Acceptable in nearly every move-an-IP workflow because the whole point is to use the reserved IP instead.
Reserved IP on the target → Remove detaches it but keeps it in your account (still billing at $3/mo). It’s now floating, ready to attach somewhere else, or release if you don’t want it. Don’t accidentally double up on reserved IPs you’ll keep paying for.
If the target VM uses only IPv6 today and you’re moving a reserved IPv4, you can skip the remove step — the IPv4 slot is empty and the attach will succeed directly.
Once the target VM’s same-type slot is empty, attach via one of three equivalent paths:
From
How
VM detail → Network tab (target VM)
Click Add Public IP → choose Reserved IP → pick this IP from the list
Networking → Public IPs
Find the IP’s row, click ⋮ → Attach to VM → pick the target
Networking diagram
Click the unattached IP node → Attach to VM → pick the target (when this entry point is wired in the diagram)
The IP attaches to the new VM, the new VM picks it up via cloud-init / DHCP, and outbound traffic from the IP starts originating on the new VM. Inbound traffic to the IP starts arriving on the new VM as soon as the move completes — typically within a few seconds.
When a primary VM is unhealthy and you keep a warm-standby:
Standby VM exists in the same region, configured identically, with no public IP
Detect failure (manually or via monitoring)
Detach the reserved IP from the failed primary
Attach to the standby
Standby starts serving the same address; clients reconnect
There’s no managed failover product on Raff today; this is the do-it-yourself pattern. Automate steps 3–4 with the Change IP API if you need it scripted.
What Raff does not provide. The reserved-IP move is a control-plane action — it requires an explicit detach + attach call. Raff does not ship any of the in-guest, sub-second failover mechanisms you may know from on-prem networking:
No VRRP / keepalived — the IP is bound to one VM at a time at the platform level. Two VMs in the same VPC cannot share a public IP via heartbeat-driven floating-IP scripts; the second VM cannot ARP for an IP the platform has not attached to it.
No anycast / BGP failover — Raff does not announce customer IPs to multiple endpoints
No managed health-check + automatic failover — detection of “primary is down” is your responsibility (monitoring, status checks, custom watchdog)
Sub-second failover patterns from on-prem (keepalived + a VIP shared between two NICs) won’t work and trying to configure them inside two Raff VMs leads to silent breakage — only one VM ever receives traffic, and it’s the one Raff has the IP attached to.If you need automatic failover today, build it on top of the Change IP API — your monitoring detects the failure and your script calls the API to repoint the reserved IP. The detach + attach round-trip typically completes in under a minute, which is the practical floor on RTO with this approach.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Raff","colors":{"primary":"#E43D12","light":"#f15e3a","dark":"#b32f0d"},"logo":{"light":"https://mintcdn.com/rafftechnologiesllc/-fGNhyEGXJeJV5ed/logo/light.svg?fit=max\u0026auto=format\u0026n=-fGNhyEGXJeJV5ed\u0026q=85\u0026s=0e81ca868d348265df3068ed9c0d9769","dark":"https://mintcdn.com/rafftechnologiesllc/-fGNhyEGXJeJV5ed/logo/dark.svg?fit=max\u0026auto=format\u0026n=-fGNhyEGXJeJV5ed\u0026q=85\u0026s=449e6e79f98b68b6f313c524bc66dc76"},"favicon":"https://mintcdn.com/rafftechnologiesllc/W-SRe3pyhI_9M9ss/favicon.ico?fit=max\u0026auto=format\u0026n=W-SRe3pyhI_9M9ss\u0026q=85\u0026s=108c3e7250ef83b8d547d35e00467418","api":{"playground":{}},"navbar":{"links":[{"href":"mailto:support@rafftechnologies.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.rafftechnologies.com"}},"footer":{"socials":{"x":"https://x.com/rafftechnologies","instagram":"https://instagram.com/rafftechnologies","linkedin":"https://linkedin.com/company/rafftechnologies","reddit":"https://www.reddit.com/user/rafftechnologies","github":"https://github.com/rafftechnologies"},"links":[{"header":"Company","items":[{"label":"About","href":"https://rafftechnologies.com/about-us"},{"label":"Blog","href":"https://rafftechnologies.com/blog"},{"label":"Pricing","href":"https://rafftechnologies.com/pricing"},{"label":"Status","href":"https://rafftechnologies.com/status"}]},{"header":"Docs","items":[{"label":"Docs Home","href":"/introduction"},{"label":"API Reference","href":"/api-reference/endpoints"},{"label":"CLI","href":"/reference/cli/introduction"},{"label":"Terraform Provider","href":"https://registry.terraform.io/providers/RaffTechnologies/raff/latest"},{"label":"Quickstart","href":"/quickstart"},{"label":"Products","href":"/products"}]},{"header":"Application","items":[{"label":"Dashboard","href":"https://app.rafftechnologies.com"},{"label":"Sign in","href":"https://app.rafftechnologies.com/auth/sign-in"},{"label":"Sign up","href":"https://app.rafftechnologies.com/auth/sign-up"},{"label":"Marketplace","href":"https://marketplace.rafftechnologies.com"}]},{"header":"Support","items":[{"label":"Tickets","href":"https://help.rafftechnologies.com"},{"label":"Contact","href":"mailto:support@rafftechnologies.com"},{"label":"FAQ","href":"https://rafftechnologies.com/faq"},{"label":"Terms of Service","href":"https://app.rafftechnologies.com/legal"},{"label":"Privacy Policy","href":"https://app.rafftechnologies.com/legal"},{"label":"SLA","href":"https://app.rafftechnologies.com/legal"}]}]},"seo":{"metatags":{"og:site_name":"Raff","og:image":"https://rafftechnologies.com/images/og.jpg","twitter:card":"summary_large_image","twitter:site":"@rafftechnologies"},"indexing":"all"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Changelog","icon":"clock-rotate-left","href":"/api-reference/changelog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"rafftechnologiesllc","hasAudioNarration":false,"actualSubdomain":"rafftechnologiesllc","customDomains":["docs.rafftechnologies.com"],"gitSource":{"type":"github","owner":"rafftechnologies","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec9e50b60c5e999977098f","collectionId":"ec34cc43-45f1-4417-bf03-f82bc9b6cb21","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec9e50b60c5e999977098f"},"feedback":{"thumbs":false},"entitlements":{},"buildId":"6aec9e50b60c5e999977098f","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Reference","count":280},{"language":"default","tag":"Products","count":231},{"language":"default","tag":"REST API","count":229},{"language":"default","tag":"Build","count":109},{"language":"default","tag":"Quickstart \u0026 guides","count":94},{"language":"default","tag":"Raff Apps","count":72},{"language":"default","tag":"Virtual Machines","count":65},{"language":"default","tag":"Concepts","count":62},{"language":"default","tag":"Managed Databases","count":60},{"language":"default","tag":"Kubernetes","count":52}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"products/network/public-ips/quickstart-guides/move-between-vms","slug":"/products/network/public-ips/quickstart-guides/move-between-vms","pageMetadata":{"title":"Move a reserved IP between VMs","description":"Detach a reserved public IP from one VM, attach it to another, without changing the IP itself — useful for blue/green deploys, failover, and partner-whitelist preservation","href":"/products/network/public-ips/quickstart-guides/move-between-vms"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Detach a reserved public IP from one VM, attach it to another, without changing the IP itself — useful for blue/green deploys, failover, and partner-whitelist preservation\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,Frame,Heading,OptimizedImage,Table,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(`sub`,{children:`Updated May 8, 2026`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.strong,{children:`reserved IP`}),` can be moved from one VM to another without changing the address. Detach it from VM A, attach it to VM B — the IP stays the same, your DNS records stay valid, partner whitelists stay correct, and the only thing that changes is which server traffic lands on. This is the standard pattern for blue/green deploys, manual failover, and “promote a candidate VM by repointing the IP” workflows.`]}),`\n`,_jsxs(_components.p,{children:[`This page covers reserved IPs only. `,_jsx(_components.strong,{children:`Auto-assigned IPs cannot be moved`}),` — when you detach an auto-assigned IP, it returns to the regional pool and may be allocated to someone else. If you need this workflow, `,_jsx(_components.a,{href:`/products/network/public-ips/quickstart-guides/reserve-ip`,children:`reserve an IP first`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.strong,{children:`reserved`}),` IP — the Type column on the Public IPs tab will say “Reserved” (not “VM” or “Gateway”)`]}),`\n`,_jsxs(_components.li,{children:[`A target VM in the `,_jsx(_components.strong,{children:`same region`}),` as the IP — IPs are region-locked`]}),`\n`,_jsx(_components.li,{children:`The target VM should not already have a public IP of the same type (IPv4 ↔ IPv4, IPv6 ↔ IPv6) — remove its existing one first, or assign the moved IP to the IPv6 slot if it’s free`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`1-detach-from-the-source-vm`,children:`1. Detach from the source VM`}),`\n`,_jsx(_components.p,{children:`Two equivalent paths — pick whichever is closer:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`From`}),_jsx(_components.th,{children:`How`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`VM detail → Network tab`})}),_jsxs(_components.td,{children:[`Click `,_jsx(_components.strong,{children:`Remove Public IP`}),` on the IP’s card. Confirm the dialog (it shows “reserved IP — will stay in your account”).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Networking → Public IPs`})}),_jsxs(_components.td,{children:[`Find the IP’s row, click `,_jsx(_components.code,{children:`⋮`}),` → `,_jsx(_components.strong,{children:`Detach from VM`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Networking diagram`})}),_jsxs(_components.td,{children:[`Click the blue IP chip floating above the source VM → `,_jsx(_components.strong,{children:`Detach from VM`}),`.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The IP detaches in seconds. On the Public IPs tab, the row’s `,_jsx(_components.strong,{children:`Assigned To`}),` column now reads `,_jsx(_components.code,{children:`—`}),` (or `,_jsx(_components.code,{children:`Unassigned`}),`) and the IP is ready to re-attach.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The address stays the same.`}),` Active SSH/RDP/HTTP sessions to the IP drop because they’re now hitting nothing — that’s expected. DNS records pointing at this IP keep resolving correctly; they just temporarily don’t have a backend until you complete step 2.`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-check-the-target-vm-—-and-remove-any-existing-public-ip-of-the-same-type-first`,children:`2. Check the target VM — and remove any existing public IP of the same type first`}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The target VM must not already have a public IP of the same type (IPv4 or IPv6).`}),` A VM holds at most `,_jsx(_components.strong,{children:`one`}),` public IPv4 and `,_jsx(_components.strong,{children:`one`}),` public IPv6 from the dashboard — if you try to attach a reserved IPv4 to a VM that already has an IPv4 (auto-assigned or reserved), the attach is `,_jsx(_components.strong,{children:`rejected`}),` with `,_jsx(_components.code,{children:`VM already has an IPv4`}),`. Same rule for IPv6.`]}),_jsxs(_components.p,{children:[`Open the target VM’s detail page → `,_jsx(_components.strong,{children:`Network`}),` tab. If the IPv4 (or IPv6) card already shows an address, click `,_jsx(_components.strong,{children:`Remove Public IP`}),` on that card `,_jsx(_components.em,{children:`before`}),` moving on to the attach step:`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/rafftechnologiesllc/n4fsufxkvK_RoBMU/images/products/network/firewall/vm-network-firewall-attach.png?fit=max\u0026auto=format\u0026n=n4fsufxkvK_RoBMU\u0026q=85\u0026s=cbebfa7a7ef1bc2b63c562134df2ec03`,alt:`VM Network tab IPv4 public IP card with eth0 - Public Network, Public + Primary tags, the existing IP, MAC, Gateway, a Firewall row, and a red Remove Public IP button at the bottom — this is the button to click before attaching the reserved IP`,\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`1029`,height:`1029`,\"data-path\":`images/products/network/firewall/vm-network-firewall-attach.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/rafftechnologiesllc/n4fsufxkvK_RoBMU/images/products/network/firewall/vm-network-firewall-attach.png?w=280\u0026fit=max\u0026auto=format\u0026n=n4fsufxkvK_RoBMU\u0026q=85\u0026s=24cb34ebef4c982e7d8ded62dfe0bcc6 280w, https://mintcdn.com/rafftechnologiesllc/n4fsufxkvK_RoBMU/images/products/network/firewall/vm-network-firewall-attach.png?w=560\u0026fit=max\u0026auto=format\u0026n=n4fsufxkvK_RoBMU\u0026q=85\u0026s=045f3feb438dbcdb2d3a1e4acba8e027 560w, https://mintcdn.com/rafftechnologiesllc/n4fsufxkvK_RoBMU/images/products/network/firewall/vm-network-firewall-attach.png?w=840\u0026fit=max\u0026auto=format\u0026n=n4fsufxkvK_RoBMU\u0026q=85\u0026s=37f043569cab32c3a5853a23e2979c59 840w, https://mintcdn.com/rafftechnologiesllc/n4fsufxkvK_RoBMU/images/products/network/firewall/vm-network-firewall-attach.png?w=1100\u0026fit=max\u0026auto=format\u0026n=n4fsufxkvK_RoBMU\u0026q=85\u0026s=a723bcbdcfcfcda754fcb35427e020db 1100w, https://mintcdn.com/rafftechnologiesllc/n4fsufxkvK_RoBMU/images/products/network/firewall/vm-network-firewall-attach.png?w=1650\u0026fit=max\u0026auto=format\u0026n=n4fsufxkvK_RoBMU\u0026q=85\u0026s=274a8b9ca5410af5930cde5a3795b450 1650w, https://mintcdn.com/rafftechnologiesllc/n4fsufxkvK_RoBMU/images/products/network/firewall/vm-network-firewall-attach.png?w=2500\u0026fit=max\u0026auto=format\u0026n=n4fsufxkvK_RoBMU\u0026q=85\u0026s=ed7bf5089a0eb987a1fddf55012b65b2 2500w`})}),_jsx(_components.p,{children:`Two important nuances:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Auto-assigned IP on the target → Remove returns it to the pool, permanently.`}),` You won’t get the same address back. Acceptable in nearly every move-an-IP workflow because the whole point is to use the reserved IP instead.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reserved IP on the target → Remove detaches it but keeps it in your account`}),` (still billing at $3/mo). It’s now floating, ready to attach somewhere else, or release if you don’t want it. Don’t accidentally double up on reserved IPs you’ll keep paying for.`]}),`\n`]}),_jsxs(_components.p,{children:[`If the target VM uses `,_jsx(_components.strong,{children:`only IPv6`}),` today and you’re moving a reserved `,_jsx(_components.strong,{children:`IPv4`}),`, you can skip the remove step — the IPv4 slot is empty and the attach will succeed directly.`]})]}),`\n`,_jsx(_components.p,{children:`Once the target VM’s same-type slot is empty, attach via one of three equivalent paths:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`From`}),_jsx(_components.th,{children:`How`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`VM detail → Network tab`}),` (target VM)`]}),_jsxs(_components.td,{children:[`Click `,_jsx(_components.strong,{children:`Add Public IP`}),` → choose `,_jsx(_components.strong,{children:`Reserved IP`}),` → pick this IP from the list`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Networking → Public IPs`})}),_jsxs(_components.td,{children:[`Find the IP’s row, click `,_jsx(_components.code,{children:`⋮`}),` → `,_jsx(_components.strong,{children:`Attach to VM`}),` → pick the target`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Networking diagram`})}),_jsxs(_components.td,{children:[`Click the unattached IP node → `,_jsx(_components.strong,{children:`Attach to VM`}),` → pick the target (when this entry point is wired in the diagram)`]})]})]})]}),`\n`,_jsx(_components.p,{children:`The IP attaches to the new VM, the new VM picks it up via cloud-init / DHCP, and outbound traffic from the IP starts originating on the new VM. Inbound traffic to the IP starts arriving on the new VM as soon as the move completes — typically within a few seconds.`}),`\n`,_jsxs(Heading,{level:`2`,id:`what-this-does-not-change`,children:[`What this does `,_jsx(_components.em,{children:`not`}),` change`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The IP address itself`}),` — same `,_jsx(_components.code,{children:`1.2.3.4`}),` before and after`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`DNS records`}),` — anything pointing at the IP is still valid; you don’t need to update DNS`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`TLS certificates pinned to the IP`}),` — still valid`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Partner whitelists by IP`}),` — still match`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Your billing for the IP`}),` — $3/month continues uninterrupted`]}),`\n`]}),`\n`,_jsxs(Heading,{level:`2`,id:`what-it-does-change`,children:[`What it `,_jsx(_components.em,{children:`does`}),` change`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The MAC address`}),` behind the IP — it’s now the new VM’s NIC`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Active TCP connections`}),` — drop on detach. Clients reconnect; the new VM serves them`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Outbound source IP`}),` — outbound traffic from the new VM now appears to originate from the moved IP`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The Public IPs tab’s Assigned To column`}),` — points at the new VM`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The diagram`}),` — the blue IP chip moves above the new VM card`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`blue/green-deploy-pattern`,children:`Blue/green deploy pattern`}),`\n`,_jsx(_components.p,{children:`The canonical “swap the green VM in” workflow:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Build a fresh VM (the “green” candidate) — runs in parallel, no traffic`}),`\n`,_jsx(_components.li,{children:`Test green via its own auto-assigned IP, an internal VPC IP, or a hosts-file override`}),`\n`,_jsxs(_components.li,{children:[`When ready, `,_jsx(_components.strong,{children:`detach`}),` the reserved IP from the current “blue” VM`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Attach`}),` it to the green VM — traffic immediately flips`]}),`\n`,_jsx(_components.li,{children:`Keep blue running for a rollback window. If green is healthy, delete blue (or the reverse if not)`}),`\n`]}),`\n`,_jsx(_components.p,{children:`The whole switch is one detach-then-attach, taking under a minute. Rollback is just running the same two steps in reverse.`}),`\n`,_jsx(Heading,{level:`2`,id:`failover-pattern`,children:`Failover pattern`}),`\n`,_jsx(_components.p,{children:`When a primary VM is unhealthy and you keep a warm-standby:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Standby VM exists in the same region, configured identically, with no public IP`}),`\n`,_jsx(_components.li,{children:`Detect failure (manually or via monitoring)`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Detach`}),` the reserved IP from the failed primary`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Attach`}),` to the standby`]}),`\n`,_jsx(_components.li,{children:`Standby starts serving the same address; clients reconnect`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`There’s no managed failover product on Raff today; this is the do-it-yourself pattern. Automate steps 3–4 with the `,_jsx(_components.a,{href:`/api-reference/endpoint/change-ip`,children:`Change IP API`}),` if you need it scripted.`]}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`What Raff does not provide.`}),` The reserved-IP move is a control-plane action — it requires an explicit detach + attach call. Raff does `,_jsx(_components.strong,{children:`not`}),` ship any of the in-guest, sub-second failover mechanisms you may know from on-prem networking:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No VRRP / keepalived`}),` — the IP is bound to one VM at a time at the platform level. Two VMs in the same VPC cannot share a public IP via heartbeat-driven floating-IP scripts; the second VM cannot ARP for an IP the platform has not attached to it.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No anycast / BGP failover`}),` — Raff does not announce customer IPs to multiple endpoints`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No managed health-check + automatic failover`}),` — detection of “primary is down” is your responsibility (monitoring, status checks, custom watchdog)`]}),`\n`]}),_jsxs(_components.p,{children:[`Sub-second failover patterns from on-prem (`,_jsx(_components.code,{children:`keepalived`}),` + a VIP shared between two NICs) won’t work and trying to configure them inside two Raff VMs leads to silent breakage — only one VM ever receives traffic, and it’s the one Raff has the IP attached to.`]}),_jsxs(_components.p,{children:[`If you need automatic failover today, build it on top of the `,_jsx(_components.a,{href:`/api-reference/endpoint/change-ip`,children:`Change IP API`}),` — your monitoring detects the failure and your script calls the API to repoint the reserved IP. The detach + attach round-trip typically completes in `,_jsx(_components.strong,{children:`under a minute`}),`, which is the practical floor on RTO with this approach.`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(CardGroup,{cols:3,children:[_jsx(Card,{title:`Reserve a static IP`,icon:`anchor`,href:`/products/network/public-ips/quickstart-guides/reserve-ip`,children:_jsx(_components.p,{children:`Make an IP movable by reserving it.`})}),_jsx(Card,{title:`Manage from a VM`,icon:`server`,href:`/products/network/public-ips/quickstart-guides/manage-from-vm`,children:_jsx(_components.p,{children:`Per-VM Network tab walkthrough.`})}),_jsx(Card,{title:`Release an IP`,icon:`trash`,href:`/products/network/public-ips/quickstart-guides/release-ip`,children:_jsx(_components.p,{children:`Stop billing when you don’t need the IP.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Move a reserved IP between VMs","description":"Detach a reserved public IP from one VM, attach it to another, without changing the IP itself — useful for blue/green deploys, failover, and partner-whitelist preservation","href":"/products/network/public-ips/quickstart-guides/move-between-vms"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"1. Detach from the source VM","slug":"1-detach-from-the-source-vm","depth":2,"children":[]},{"title":"2. Check the target VM — and remove any existing public IP of the same type first","slug":"2-check-the-target-vm-—-and-remove-any-existing-public-ip-of-the-same-type-first","depth":2,"children":[]},{"title":"What this does not change","slug":"what-this-does-not-change","depth":2,"children":[]},{"title":"What it does change","slug":"what-it-does-change","depth":2,"children":[]},{"title":"Blue/green deploy pattern","slug":"blue/green-deploy-pattern","depth":2,"children":[]},{"title":"Failover pattern","slug":"failover-pattern","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"rafftechnologiesllc","siteName":"Raff","title":"Move a reserved IP between VMs - Raff","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-08T20:07:37.806Z","gitLastModified":"2026-05-08T20:07:16.000Z","originalFileLocation":"products/network/public-ips/quickstart-guides/move-between-vms.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Detach a reserved public IP from one VM, attach it to another, without changing the IP itself — useful for blue/green deploys, failover, and partner-whitelist preservation\">\u003cmeta data-mint-head name=\"application-name\" content=\"Raff\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Move a reserved IP between VMs - Raff\">\u003cmeta data-mint-head property=\"og:description\" content=\"Detach a reserved public IP from one VM, attach it to another, without changing the IP itself — useful for blue/green deploys, failover, and partner-whitelist preservation\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Raff\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://rafftechnologies.com/images/og.jpg\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Move a reserved IP between VMs - Raff\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Detach a reserved public IP from one VM, attach it to another, without changing the IP itself — useful for blue/green deploys, failover, and partner-whitelist preservation\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://rafftechnologies.com/images/og.jpg\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/rafftechnologiesllc/81XTCmJ0Yt4lOC7_/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Raff\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#E43D12\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/products/network/public-ips/quickstart-guides/move-between-vms.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.rafftechnologies.com/#organization\",\"name\":\"Raff\",\"url\":\"https://docs.rafftechnologies.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/rafftechnologiesllc/-fGNhyEGXJeJV5ed/logo/light.svg?fit=max\u0026auto=format\u0026n=-fGNhyEGXJeJV5ed\u0026q=85\u0026s=0e81ca868d348265df3068ed9c0d9769\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.rafftechnologies.com#website\",\"name\":\"Raff\",\"url\":\"https://docs.rafftechnologies.com\",\"publisher\":{\"@id\":\"https://docs.rafftechnologies.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms#webpage\",\"url\":\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms\",\"name\":\"Move a reserved IP between VMs\",\"description\":\"Detach a reserved public IP from one VM, attach it to another, without changing the IP itself — useful for blue/green deploys, failover, and partner-whitelist preservation\",\"dateModified\":\"2026-05-08T20:07:16.000Z\",\"isPartOf\":{\"@id\":\"https://docs.rafftechnologies.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Network\",\"item\":\"https://docs.rafftechnologies.com/products/network/vpc/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Public IPs\",\"item\":\"https://docs.rafftechnologies.com/products/network/public-ips/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Quickstart \u0026 guides\",\"item\":\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/auto-assign\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Move a reserved IP between VMs\",\"item\":\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms#article\",\"headline\":\"Move a reserved IP between VMs\",\"name\":\"Move a reserved IP between VMs\",\"description\":\"Detach a reserved public IP from one VM, attach it to another, without changing the IP itself — useful for blue/green deploys, failover, and partner-whitelist preservation\",\"url\":\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms\",\"mainEntityOfPage\":{\"@id\":\"https://docs.rafftechnologies.com/products/network/public-ips/quickstart-guides/move-between-vms#webpage\"},\"image\":\"https://rafftechnologies.com/images/og.jpg\",\"dateModified\":\"2026-05-08T20:07:16.000Z\",\"publisher\":{\"@id\":\"https://docs.rafftechnologies.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.rafftechnologies.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Raff\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Raff","nav":{"global":{"anchors":[{"anchor":"Changelog","icon":"clock-rotate-left","href":"/api-reference/changelog"}]},"tabs":[{"tab":"Products","groups":[{"group":"Products Home","pages":[{"title":"Products","icon":"grid-2","href":"/products"},{"title":"Why Raff","icon":"sparkles","href":"/products/why-raff"}]},{"group":"Build","icon":"server","pages":[{"group":"Virtual Machines","icon":"server","pages":[{"title":"Virtual Machines","sidebarTitle":"Overview","icon":"server","href":"/products/build/virtual-machines/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Create a VM","href":"/products/build/virtual-machines/quickstart-guides/create-a-vm"},{"title":"Initial server setup (Linux)","href":"/products/build/virtual-machines/quickstart-guides/initial-server-setup"},{"title":"Connect via SSH","href":"/products/build/virtual-machines/quickstart-guides/connect-via-ssh"},{"title":"Connect via RDP","href":"/products/build/virtual-machines/quickstart-guides/connect-via-rdp"},{"title":"Open the browser console","href":"/products/build/virtual-machines/quickstart-guides/open-browser-console"},{"title":"Transfer files to and from a VM","href":"/products/build/virtual-machines/quickstart-guides/transfer-files"},{"title":"Manage power","href":"/products/build/virtual-machines/quickstart-guides/manage-power"},{"title":"Rename a VM","href":"/products/build/virtual-machines/quickstart-guides/rename"},{"title":"Resize a VM","href":"/products/build/virtual-machines/quickstart-guides/resize"},{"title":"Reset password","href":"/products/build/virtual-machines/quickstart-guides/reset-password"},{"title":"Add or remove SSH keys on a server","sidebarTitle":"Add or remove SSH keys","href":"/products/build/virtual-machines/quickstart-guides/manage-ssh-keys"},{"title":"Reinstall a VM","href":"/products/build/virtual-machines/quickstart-guides/reinstall"},{"title":"Factory reset","href":"/products/build/virtual-machines/quickstart-guides/factory-reset"},{"title":"Create a snapshot","href":"/products/build/virtual-machines/quickstart-guides/create-snapshot"},{"title":"Enable backups","href":"/products/build/virtual-machines/quickstart-guides/enable-backups"},{"title":"Recover a locked-out VM","href":"/products/build/virtual-machines/quickstart-guides/recover-locked-vm"},{"title":"Delete a VM","href":"/products/build/virtual-machines/quickstart-guides/delete-vm"}]},{"group":"Concepts","pages":[{"title":"Plans \u0026 sizing","href":"/products/build/virtual-machines/concepts/plans-and-sizing"},{"title":"CPU and bursting","href":"/products/build/virtual-machines/concepts/cpu-and-bursting"},{"title":"Regions","href":"/products/build/virtual-machines/concepts/regions"},{"title":"OS templates","href":"/products/build/virtual-machines/concepts/os-templates"},{"title":"Custom images","href":"/products/build/virtual-machines/concepts/custom-images"},{"title":"Storage model","href":"/products/build/virtual-machines/concepts/storage-model"},{"title":"Snapshots vs Backups","href":"/products/build/virtual-machines/concepts/snapshots-vs-backups"},{"title":"Lifecycle states","href":"/products/build/virtual-machines/concepts/lifecycle-states"},{"title":"Authentication \u0026 access","href":"/products/build/virtual-machines/concepts/authentication"},{"title":"Monitoring \u0026 metrics","href":"/products/build/virtual-machines/concepts/monitoring-and-metrics"},{"title":"Tags \u0026 organization","href":"/products/build/virtual-machines/concepts/tags-and-organization"},{"title":"VM notes — My Notes \u0026 Team Notes","href":"/products/build/virtual-machines/concepts/vm-notes"},{"title":"Account limits","href":"/products/build/virtual-machines/concepts/account-limits"},{"title":"Billing model","href":"/products/build/virtual-machines/concepts/billing-model"}]},{"group":"Details","pages":[{"title":"Virtual Machines features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/build/virtual-machines/details/features-and-limits"},{"title":"Pricing","href":"/products/build/virtual-machines/details/pricing"},{"title":"SLA","href":"/products/build/virtual-machines/details/sla"},{"title":"Acceptable use","href":"/products/build/virtual-machines/details/acceptable-use"},{"title":"Support","href":"/products/build/virtual-machines/details/support"}]},{"title":"Virtual Machines troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/build/virtual-machines/troubleshooting"}]},{"group":"Kubernetes","icon":"dharmachakra","pages":[{"title":"Kubernetes","sidebarTitle":"Overview","icon":"dharmachakra","href":"/products/build/kubernetes/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Create a Kubernetes cluster","sidebarTitle":"Create a cluster","href":"/products/build/kubernetes/quickstart-guides/create-a-cluster"},{"title":"Connect to Kubernetes with kubectl","sidebarTitle":"Connect with kubectl","href":"/products/build/kubernetes/quickstart-guides/connect-with-kubectl"},{"title":"Add a Kubernetes node pool","sidebarTitle":"Add a node pool","href":"/products/build/kubernetes/quickstart-guides/add-a-node-pool"},{"title":"Scale a Kubernetes node pool","sidebarTitle":"Scale a node pool","href":"/products/build/kubernetes/quickstart-guides/scale-a-node-pool"},{"title":"Upgrade to an HA control plane","sidebarTitle":"Upgrade to HA","href":"/products/build/kubernetes/quickstart-guides/upgrade-to-ha"},{"title":"Upgrade the Kubernetes version","sidebarTitle":"Upgrade version","href":"/products/build/kubernetes/quickstart-guides/upgrade-kubernetes-version"},{"title":"Install an app from App Hub","sidebarTitle":"Install an app","href":"/products/build/kubernetes/quickstart-guides/install-an-app"},{"title":"Expose a Kubernetes service","sidebarTitle":"Expose a service","href":"/products/build/kubernetes/quickstart-guides/expose-a-service"},{"title":"View Kubernetes logs and metrics","sidebarTitle":"Logs \u0026 metrics","href":"/products/build/kubernetes/quickstart-guides/view-logs-and-metrics"},{"title":"Delete a Kubernetes cluster","sidebarTitle":"Delete a cluster","href":"/products/build/kubernetes/quickstart-guides/delete-a-cluster"}]},{"group":"Concepts","pages":[{"title":"Kubernetes cluster architecture","sidebarTitle":"Cluster architecture","href":"/products/build/kubernetes/concepts/cluster-architecture"},{"title":"Kubernetes node pools and autoscaling","sidebarTitle":"Node pools \u0026 autoscaling","href":"/products/build/kubernetes/concepts/node-pools-and-autoscaling"},{"title":"Kubernetes control plane and HA","sidebarTitle":"Control plane \u0026 HA","href":"/products/build/kubernetes/concepts/control-plane-and-ha"},{"title":"Kubernetes networking","sidebarTitle":"Networking","href":"/products/build/kubernetes/concepts/networking"},{"title":"Cluster access and credentials","sidebarTitle":"Cluster access","href":"/products/build/kubernetes/concepts/cluster-access"},{"title":"Kubernetes storage","sidebarTitle":"Storage","href":"/products/build/kubernetes/concepts/storage"},{"title":"Kubernetes cluster states","sidebarTitle":"Lifecycle states","href":"/products/build/kubernetes/concepts/lifecycle-states"},{"title":"Kubernetes billing model","sidebarTitle":"Billing model","href":"/products/build/kubernetes/concepts/billing-model"}]},{"group":"Details","pages":[{"title":"Kubernetes features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/build/kubernetes/details/features-and-limits"},{"title":"Kubernetes pricing","sidebarTitle":"Pricing","href":"/products/build/kubernetes/details/pricing"},{"title":"Kubernetes SLA","sidebarTitle":"SLA","href":"/products/build/kubernetes/details/sla"},{"title":"Kubernetes supported versions","sidebarTitle":"Supported versions","href":"/products/build/kubernetes/details/supported-versions"}]},{"title":"Kubernetes troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/build/kubernetes/troubleshooting"}]},{"group":"Raff Apps","icon":"rocket","pages":[{"title":"Raff Apps","sidebarTitle":"Overview","icon":"rocket","href":"/products/build/raff-apps/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Deploy an app from GitHub","sidebarTitle":"Deploy from GitHub","href":"/products/build/raff-apps/quickstart-guides/deploy-from-github"},{"title":"Deploy a Docker image","href":"/products/build/raff-apps/quickstart-guides/deploy-a-docker-image"},{"title":"Deploy n8n, Metabase and other templates","sidebarTitle":"Deploy a template","href":"/products/build/raff-apps/quickstart-guides/deploy-a-template"},{"title":"Import a Docker Compose file","sidebarTitle":"Import Docker Compose","href":"/products/build/raff-apps/quickstart-guides/import-docker-compose"},{"title":"Add a Postgres database to an app","sidebarTitle":"Add a Postgres database","href":"/products/build/raff-apps/quickstart-guides/add-a-database"},{"title":"Set app environment variables","sidebarTitle":"Set environment variables","href":"/products/build/raff-apps/quickstart-guides/set-environment-variables"},{"title":"Add a custom domain to an app","sidebarTitle":"Add a custom domain","href":"/products/build/raff-apps/quickstart-guides/add-a-custom-domain"},{"title":"Scale an app and let it sleep","sidebarTitle":"Scale an app","href":"/products/build/raff-apps/quickstart-guides/scale-an-app"},{"title":"Run cron jobs and one-off jobs","sidebarTitle":"Cron and one-off jobs","href":"/products/build/raff-apps/quickstart-guides/run-cron-jobs-and-jobs"},{"title":"Preview pull requests","sidebarTitle":"Pull request previews","href":"/products/build/raff-apps/quickstart-guides/preview-pull-requests"},{"title":"View logs, metrics and a shell","sidebarTitle":"Logs, metrics and shell","href":"/products/build/raff-apps/quickstart-guides/view-logs-and-metrics"},{"title":"Roll back a deploy","sidebarTitle":"Roll back a deploy","href":"/products/build/raff-apps/quickstart-guides/roll-back-a-deploy"},{"title":"Pause and resume an app","sidebarTitle":"Pause and resume","href":"/products/build/raff-apps/quickstart-guides/pause-and-resume"},{"title":"Set an Apps spend cap","sidebarTitle":"Spend cap","href":"/products/build/raff-apps/quickstart-guides/set-a-spend-cap"},{"title":"Reconnect GitHub to Raff Apps","sidebarTitle":"Reconnect GitHub","href":"/products/build/raff-apps/quickstart-guides/reconnect-github"},{"title":"Delete an app","sidebarTitle":"Delete an app","href":"/products/build/raff-apps/quickstart-guides/delete-an-app"}]},{"group":"Concepts","pages":[{"title":"App types: web, private, worker, cron and job","sidebarTitle":"App types","href":"/products/build/raff-apps/concepts/app-types"},{"title":"How Raff builds and runs your code","sidebarTitle":"Builds and sources","href":"/products/build/raff-apps/concepts/builds-and-sources"},{"title":"Deploys, health checks and rollbacks","sidebarTitle":"Deploys and health checks","href":"/products/build/raff-apps/concepts/deploys-and-health-checks"},{"title":"App sizes, scaling and sleeping","sidebarTitle":"Sizes and scaling","href":"/products/build/raff-apps/concepts/sizes-and-scaling"},{"title":"App networking and domains","sidebarTitle":"Networking and domains","href":"/products/build/raff-apps/concepts/networking-and-domains"},{"title":"How apps connect to databases","sidebarTitle":"Database links","href":"/products/build/raff-apps/concepts/database-links"},{"title":"App isolation and security","sidebarTitle":"Isolation and security","href":"/products/build/raff-apps/concepts/isolation-and-security"},{"title":"How Raff Apps billing works","sidebarTitle":"Billing model","href":"/products/build/raff-apps/concepts/billing-model"}]},{"group":"Details","pages":[{"title":"Raff Apps features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/build/raff-apps/details/features-and-limits"},{"title":"Raff Apps pricing","sidebarTitle":"Pricing","href":"/products/build/raff-apps/details/pricing"},{"title":"Raff Apps templates","sidebarTitle":"Templates","href":"/products/build/raff-apps/details/templates"}]},{"title":"Troubleshoot Raff Apps","sidebarTitle":"Troubleshooting","href":"/products/build/raff-apps/troubleshooting"}]},{"group":"Raff Keep","icon":"boxes-stacked","pages":[{"title":"Raff Keep","sidebarTitle":"Overview","icon":"boxes-stacked","href":"/products/build/raff-keep/index"},{"group":"Get a server","pages":[{"title":"Set up a MetaTrader server","href":"/products/build/raff-keep/quickstart-guides/set-up-a-metatrader-server"},{"title":"Set up an ASP.NET server","href":"/products/build/raff-keep/quickstart-guides/set-up-an-aspnet-server"},{"title":"Follow a Raff Keep install","sidebarTitle":"Follow the install","href":"/products/build/raff-keep/quickstart-guides/follow-the-install"},{"title":"Get your Raff Keep logins","sidebarTitle":"Get your logins and passwords","href":"/products/build/raff-keep/quickstart-guides/get-your-logins"}]},{"group":"Use your server","pages":[{"title":"Sign in to a Raff Keep server","sidebarTitle":"Connect with Remote Desktop","href":"/products/build/raff-keep/quickstart-guides/sign-in-with-remote-desktop"},{"title":"Add a MetaTrader terminal","href":"/products/build/raff-keep/quickstart-guides/add-a-metatrader-terminal"},{"title":"Publish an ASP.NET site","href":"/products/build/raff-keep/quickstart-guides/publish-an-aspnet-site"},{"title":"Manage ASP.NET sites and domains","sidebarTitle":"Manage sites and domains","href":"/products/build/raff-keep/quickstart-guides/manage-sites-and-domains"},{"title":"Delete a Raff Keep server","sidebarTitle":"Delete the server","href":"/products/build/raff-keep/quickstart-guides/delete-a-keep-server"}]},{"group":"Concepts","pages":[{"title":"How a Raff Keep install works","sidebarTitle":"How an install works","href":"/products/build/raff-keep/concepts/how-an-install-works"},{"title":"Logins and the built-in Administrator","sidebarTitle":"Logins and the Administrator","href":"/products/build/raff-keep/concepts/logins-and-the-built-in-administrator"},{"title":"Kept by Raff and Raff Guardian","sidebarTitle":"Kept by Raff","href":"/products/build/raff-keep/concepts/raff-guardian-choice"},{"title":"Failed Raff Keep installs","sidebarTitle":"Failed installs","href":"/products/build/raff-keep/concepts/failed-installs"},{"title":"Raff Keep billing model","sidebarTitle":"Billing model","href":"/products/build/raff-keep/concepts/billing-model"}]},{"group":"Details","pages":[{"title":"Raff Keep features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/build/raff-keep/details/features-and-limits"},{"title":"Raff Keep pricing","sidebarTitle":"Pricing","href":"/products/build/raff-keep/details/pricing"}]},{"title":"Raff Keep troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/build/raff-keep/troubleshooting"}]}]},{"group":"Store","icon":"hard-drive","pages":[{"group":"Volumes","icon":"hard-drive","pages":[{"title":"Volumes","sidebarTitle":"Overview","icon":"hard-drive","href":"/products/store/volumes/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Create a volume","href":"/products/store/volumes/quickstart-guides/create-a-volume"},{"title":"Attach to a VM","href":"/products/store/volumes/quickstart-guides/attach-to-vm"},{"title":"Resize a volume","href":"/products/store/volumes/quickstart-guides/resize-volume"},{"title":"Detach from a VM","href":"/products/store/volumes/quickstart-guides/detach-from-vm"},{"title":"Delete a volume","href":"/products/store/volumes/quickstart-guides/delete-volume"}]},{"group":"Concepts","pages":[{"title":"Volume types","href":"/products/store/volumes/concepts/volume-types"}]},{"group":"Details","pages":[{"title":"Volumes features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/store/volumes/details/features-and-limits"}]},{"title":"Volumes troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/store/volumes/troubleshooting"}]},{"group":"Object Storage","icon":"bucket","pages":[{"title":"Object Storage","sidebarTitle":"Overview","icon":"bucket","href":"/products/store/object-storage/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Create a bucket","href":"/products/store/object-storage/quickstart-guides/create-bucket"},{"title":"Upload files","href":"/products/store/object-storage/quickstart-guides/upload-files"},{"title":"Generate access keys","href":"/products/store/object-storage/quickstart-guides/generate-access-keys"},{"title":"Set public or private","href":"/products/store/object-storage/quickstart-guides/set-public-private"},{"title":"Use the S3 SDK","href":"/products/store/object-storage/quickstart-guides/s3-sdk-access"},{"title":"Monitor bucket usage","href":"/products/store/object-storage/quickstart-guides/monitor-usage"}]},{"group":"Concepts","pages":[{"title":"S3 compatibility","href":"/products/store/object-storage/concepts/s3-compatibility"}]},{"group":"Details","pages":[{"title":"Object Storage features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/store/object-storage/details/features-and-limits"}]},{"title":"Object Storage troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/store/object-storage/troubleshooting"}]},{"group":"Managed Databases","icon":"database","pages":[{"title":"Managed Databases","sidebarTitle":"Overview","icon":"database","href":"/products/store/databases/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Create a database","href":"/products/store/databases/quickstart-guides/create-a-database"},{"title":"Connect to a database","href":"/products/store/databases/quickstart-guides/connect-to-a-database"},{"title":"Turn on public access","href":"/products/store/databases/quickstart-guides/turn-on-public-access"},{"title":"Connect a database to a VPC","sidebarTitle":"Connect a VPC","href":"/products/store/databases/quickstart-guides/connect-a-vpc"},{"title":"Work with data in the dashboard","sidebarTitle":"Work with data","href":"/products/store/databases/quickstart-guides/work-with-data"},{"title":"Manage database users and passwords","sidebarTitle":"Manage users","href":"/products/store/databases/quickstart-guides/manage-users"},{"title":"Turn on PostgreSQL extensions","sidebarTitle":"Turn on extensions","href":"/products/store/databases/quickstart-guides/turn-on-extensions"},{"title":"Resize a database","href":"/products/store/databases/quickstart-guides/resize-a-database"},{"title":"Back up and restore a database","sidebarTitle":"Back up and restore","href":"/products/store/databases/quickstart-guides/back-up-and-restore"},{"title":"Monitor a database","href":"/products/store/databases/quickstart-guides/monitor-a-database"},{"title":"Delete a database","href":"/products/store/databases/quickstart-guides/delete-a-database"}]},{"group":"Concepts","pages":[{"title":"Database engines","sidebarTitle":"Engines","href":"/products/store/databases/concepts/engines"},{"title":"Database plans and sizing","sidebarTitle":"Plans and sizing","href":"/products/store/databases/concepts/plans-and-sizing"},{"title":"High availability and read replicas","sidebarTitle":"High availability and replicas","href":"/products/store/databases/concepts/high-availability-and-replicas"},{"title":"Database networking and security","sidebarTitle":"Networking and security","href":"/products/store/databases/concepts/networking-and-security"},{"title":"PostgreSQL connection pooling","sidebarTitle":"Connection pooling","href":"/products/store/databases/concepts/connection-pooling"},{"title":"Database backups and point-in-time restore","sidebarTitle":"Backups and point-in-time restore","href":"/products/store/databases/concepts/backups-and-restore"},{"title":"Database status and health","sidebarTitle":"Status and health","href":"/products/store/databases/concepts/status-and-health"},{"title":"Free database plan","sidebarTitle":"Free plan","href":"/products/store/databases/concepts/free-plan"},{"title":"Database billing model","sidebarTitle":"Billing model","href":"/products/store/databases/concepts/billing-model"}]},{"group":"Details","pages":[{"title":"Managed Databases features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/store/databases/details/features-and-limits"},{"title":"Managed Databases pricing","sidebarTitle":"Pricing","href":"/products/store/databases/details/pricing"}]},{"title":"Managed Databases troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/store/databases/troubleshooting"}]}]},{"group":"Network","icon":"network-wired","pages":[{"group":"VPC","icon":"network-wired","pages":[{"title":"Virtual Private Cloud","sidebarTitle":"Overview","icon":"network-wired","href":"/products/network/vpc/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Use the Networking diagram","href":"/products/network/vpc/quickstart-guides/use-networking-diagram"},{"title":"Create a VPC","href":"/products/network/vpc/quickstart-guides/create-vpc"},{"title":"Manage a VPC","href":"/products/network/vpc/quickstart-guides/manage-vpc"},{"title":"Attach a VM","href":"/products/network/vpc/quickstart-guides/attach-vm"},{"title":"Delete a VPC","href":"/products/network/vpc/quickstart-guides/delete-vpc"}]},{"group":"Concepts","pages":[{"title":"VXLAN, CIDR, and isolation","href":"/products/network/vpc/concepts/cidr-and-isolation"}]},{"group":"Details","pages":[{"title":"VPC features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/network/vpc/details/features-and-limits"}]},{"title":"VPC troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/network/vpc/troubleshooting"}]},{"group":"Public IPs","icon":"globe","pages":[{"title":"Public IPs","sidebarTitle":"Overview","icon":"globe","href":"/products/network/public-ips/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Auto-assign a public IP","href":"/products/network/public-ips/quickstart-guides/auto-assign"},{"title":"Reserve a static IP","href":"/products/network/public-ips/quickstart-guides/reserve-ip"},{"title":"Manage public IPs from a VM","description":"Every VM has a Network tab in its detail page where you can add, remove, or attach a Firewall to the VM's public IPv4 and IPv6 addresses, and connect the VM to a VPC","href":"/products/network/public-ips/quickstart-guides/manage-from-vm"},{"title":"Move a reserved IP between VMs","href":"/products/network/public-ips/quickstart-guides/move-between-vms"},{"title":"Release a public IP","description":"Stop billing on a reserved IP by releasing it back to the pool — irreversible, the IP becomes available for someone else to auto-assign or reserve","href":"/products/network/public-ips/quickstart-guides/release-ip"}]},{"group":"Concepts","pages":[{"title":"Auto-assigned vs reserved IPs","href":"/products/network/public-ips/concepts/reserved-vs-ephemeral"}]},{"group":"Details","pages":[{"title":"Public IP features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/network/public-ips/details/features-and-limits"}]},{"title":"Public IPs troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/network/public-ips/troubleshooting"}]},{"group":"Firewall","icon":"shield-halved","pages":[{"title":"Firewall","sidebarTitle":"Overview","icon":"shield-halved","href":"/products/network/firewall/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Create a Firewall Group","href":"/products/network/firewall/quickstart-guides/create-firewall-group"},{"title":"Add rules — port and IP formats by example","href":"/products/network/firewall/quickstart-guides/add-rules"},{"title":"Attach a Firewall Group to a VM","href":"/products/network/firewall/quickstart-guides/attach-to-vm"},{"title":"Update rules in a Firewall Group","href":"/products/network/firewall/quickstart-guides/update-rules"},{"title":"Delete a Firewall Group","href":"/products/network/firewall/quickstart-guides/delete-firewall-group"}]},{"group":"Concepts","pages":[{"title":"Inbound vs outbound, layers, and rule format","href":"/products/network/firewall/concepts/inbound-vs-outbound"}]},{"group":"Details","pages":[{"title":"Firewall features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/network/firewall/details/features-and-limits"}]},{"title":"Firewall troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/network/firewall/troubleshooting"}]}]},{"group":"Manage","icon":"folder","pages":[{"group":"Team \u0026 Projects","icon":"users","pages":[{"title":"Team \u0026 Projects","sidebarTitle":"Overview","icon":"users","href":"/products/manage/team-projects/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Invite a member","href":"/products/manage/team-projects/quickstart-guides/invite-member"},{"title":"Change or remove a member's role","href":"/products/manage/team-projects/quickstart-guides/change-role"},{"title":"Remove a member","href":"/products/manage/team-projects/quickstart-guides/remove-member"},{"title":"Create a project","href":"/products/manage/team-projects/quickstart-guides/create-a-project"},{"title":"Edit or delete a project","href":"/products/manage/team-projects/quickstart-guides/delete-a-project"},{"title":"Generate an API key","href":"/products/manage/team-projects/quickstart-guides/generate-api-key"},{"title":"Rotate an API key","href":"/products/manage/team-projects/quickstart-guides/rotate-api-key"}]},{"group":"Concepts","pages":[{"title":"Roles, scopes, and the Owner","href":"/products/manage/team-projects/concepts/roles-and-api-keys"},{"title":"Resource scoping","href":"/products/manage/team-projects/concepts/projects-and-scoping"},{"title":"API keys","href":"/products/manage/team-projects/concepts/api-keys"}]},{"group":"Details","pages":[{"title":"Permissions matrix","href":"/products/manage/team-projects/details/permissions-matrix"}]},{"title":"Team \u0026 Projects troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/manage/team-projects/troubleshooting"}]},{"group":"Raff Guardian","icon":"shield-check","pages":[{"title":"Raff Guardian","sidebarTitle":"Overview","icon":"shield-check","href":"/products/manage/raff-guardian/index"},{"group":"Set up","pages":[{"title":"Add Raff Guardian while creating a server","sidebarTitle":"Add while creating a server","href":"/products/manage/raff-guardian/quickstart-guides/add-while-creating-a-server"},{"title":"Install Raff Guardian on an existing server","sidebarTitle":"Install on an existing server","href":"/products/manage/raff-guardian/quickstart-guides/install-on-an-existing-server"},{"title":"Set permissions: what Raff Guardian may do","sidebarTitle":"Set permissions: what it may do","href":"/products/manage/raff-guardian/quickstart-guides/set-permissions"},{"title":"Uninstall Raff Guardian from a server","sidebarTitle":"Uninstall Raff Guardian","href":"/products/manage/raff-guardian/quickstart-guides/uninstall"}]},{"group":"Everyday","pages":[{"title":"Approve or decline a change Raff Guardian proposes","sidebarTitle":"Approve or decline a change","href":"/products/manage/raff-guardian/quickstart-guides/approve-or-decline-a-change"},{"title":"See what Raff Guardian did: the activity log","sidebarTitle":"See what it did (activity log)","href":"/products/manage/raff-guardian/quickstart-guides/see-the-activity-log"},{"title":"Let Raff support help with your server","sidebarTitle":"Let Raff support help","href":"/products/manage/raff-guardian/quickstart-guides/let-raff-support-help"}]},{"group":"Security","pages":[{"title":"Block or unblock an IP address","sidebarTitle":"Block or unblock an IP address","href":"/products/manage/raff-guardian/quickstart-guides/block-or-unblock-an-ip-address"},{"title":"Limit who can reach Remote Desktop","sidebarTitle":"Limit who can reach Remote Desktop","href":"/products/manage/raff-guardian/quickstart-guides/limit-remote-desktop-access"},{"title":"Reset Windows passwords and manage users","sidebarTitle":"Reset passwords and manage users","href":"/products/manage/raff-guardian/quickstart-guides/reset-passwords-and-manage-windows-users"}]},{"group":"Updates and power","pages":[{"title":"Schedule Windows updates","sidebarTitle":"Schedule Windows updates","href":"/products/manage/raff-guardian/quickstart-guides/schedule-windows-updates"},{"title":"Restart or shut down the server safely","sidebarTitle":"Restart or shut down the server","href":"/products/manage/raff-guardian/quickstart-guides/restart-or-shut-down-the-server"}]},{"group":"Concepts","pages":[{"title":"How Raff Guardian works","sidebarTitle":"How it works","href":"/products/manage/raff-guardian/concepts/how-it-works"},{"title":"Raff Guardian modes and permissions","sidebarTitle":"Modes and permissions","href":"/products/manage/raff-guardian/concepts/modes-and-permissions"},{"title":"Raff Guardian automatic blocking and account lockout","sidebarTitle":"Automatic blocking and lockout","href":"/products/manage/raff-guardian/concepts/automatic-blocking"},{"title":"Windows updates with Raff Guardian","sidebarTitle":"Windows updates","href":"/products/manage/raff-guardian/concepts/windows-updates"},{"title":"Raff Guardian findings","sidebarTitle":"Findings","href":"/products/manage/raff-guardian/concepts/findings"},{"title":"Raff Guardian activity","sidebarTitle":"Activity","href":"/products/manage/raff-guardian/concepts/activity"},{"title":"What Raff Guardian reads and sends","sidebarTitle":"Privacy and data","href":"/products/manage/raff-guardian/concepts/privacy-and-data"}]},{"group":"Details","pages":[{"title":"Raff Guardian features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/manage/raff-guardian/details/features-and-limits"},{"title":"Raff Guardian pricing","sidebarTitle":"Pricing","href":"/products/manage/raff-guardian/details/pricing"}]},{"title":"Raff Guardian troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/manage/raff-guardian/troubleshooting"}]}]},{"group":"AI","icon":"robot","pages":[{"group":"MCP server","icon":"plug","pages":[{"title":"Raff MCP server","sidebarTitle":"Overview","icon":"robot","href":"/products/ai/mcp/index"},{"group":"Quickstart \u0026 guides","pages":[{"title":"Connect Raff to Claude","sidebarTitle":"Connect Claude","href":"/products/ai/mcp/quickstart-guides/connect-claude"},{"title":"Connect Raff to Claude Code","sidebarTitle":"Connect Claude Code","href":"/products/ai/mcp/quickstart-guides/connect-claude-code"},{"title":"Connect Raff to ChatGPT","sidebarTitle":"Connect ChatGPT","href":"/products/ai/mcp/quickstart-guides/connect-chatgpt"},{"title":"Connect Raff to Cursor","sidebarTitle":"Connect Cursor","href":"/products/ai/mcp/quickstart-guides/connect-cursor"},{"title":"Connect Raff to VS Code, Gemini CLI and other apps","sidebarTitle":"Connect other apps","href":"/products/ai/mcp/quickstart-guides/connect-other-clients"},{"title":"Create a database from chat","href":"/products/ai/mcp/quickstart-guides/create-a-database-from-chat"},{"title":"Use Raff docs in your AI tools","sidebarTitle":"Connect the docs server","href":"/products/ai/mcp/quickstart-guides/connect-docs-server"}]},{"group":"Concepts","pages":[{"title":"MCP sign-in and access","sidebarTitle":"Sign-in and access","href":"/products/ai/mcp/concepts/sign-in-and-access"},{"title":"MCP paid changes and confirmation","sidebarTitle":"Paid changes","href":"/products/ai/mcp/concepts/paid-changes"},{"title":"MCP read-only mode and tool groups","sidebarTitle":"Read-only mode and tool groups","href":"/products/ai/mcp/concepts/read-only-and-tool-groups"}]},{"group":"Details","pages":[{"title":"Raff MCP server tools","sidebarTitle":"Tools","href":"/products/ai/mcp/details/tools"},{"title":"Raff MCP server features and limits","sidebarTitle":"Features \u0026 limits","href":"/products/ai/mcp/details/features-and-limits"}]},{"title":"Raff MCP server troubleshooting","sidebarTitle":"Troubleshooting","href":"/products/ai/mcp/troubleshooting"}]}]}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/introduction"}]}]},"basePath":"","title":"Move a reserved IP between VMs - Raff","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-CK6QbnxT.js","DynamicMarkdown-BKiHAm_d.js","zoom-image-lightbox-CLQdF-Ar.js","lightbox-handle-r17bVUz3.js"]}