It’s very common these days for hosting providers to offer cloud-based hosting solutions to their customers. In configuring these servers ourselves, and in interactions with our customers’ servers, an issue has come to our attention where the
dhclient script does not preserve locally-configured hostnames. This means that hostnames configured on the command line might not remain through a reboot. We wante to provide a workaround solution for this while continuing to investigate a more permanent, long-term solution.
What is the issue?
For many cloud hosting providers, configuring automated deployments is done by invoking the
dhclient script at boot-time, which includes configuring the server’s hostname incorrectly. Commonly, hosting providers will use additional scripting to work around this issue. For example, Google Cloud Engine uses the google_set_hostname script.
However, this solution creates a new problem: these scripts may interfere with WHM’s Change Hostname feature (WHM >> Home >> Networking Setup >> Change Hostname). If your hostname is set in WHM to something that conflicts with the hostname set by the
dhclient script, there will be problems in cPanel & WHM, up to and including the invalidation of the server’s cPanel Software license.
To resolve this issue, you must create a
dhclient exit hook script, which will then set the hostname properly at boot-time. You first create a script like the one below, which we have named
set-hostname.sh, in the
/etc/dhcp/dhclient-exit-hooks.d/ directory. In this example, replace
hostname.example.com with your desired server hostname:
You can also use the below command to create the script, input the proper information, and set the file’s permissions correctly. Make sure to replace
hostname.example.com with your desired hostname:
Step by Step – Cloud-Based Hostname Workaround
Cloud-based hostnames, such as those given by default on Amazon EC2 instances or other cloud providers, can be problematic. They are often not human-friendly, may change upon restart, and don’t lend themselves well to brand recognition. If you need a workaround for this, here are some strategies:
- Domain Name System (DNS) Providers:
Use DNS providers like Amazon Route 53, Cloudflare, Google Cloud DNS, or traditional domain registrars to create A records or CNAME records that point to your cloud-based IP or hostname. This allows you to have:rust
example.com -> your-instance.cloudprovider.com
- Elastic IP Addresses (Amazon EC2):
If you’re using Amazon EC2, you can allocate an Elastic IP (a static, public IPv4 address) to your instance. This way, the IP address remains the same, even if the instance is stopped or restarted. You can then point your domain to this static IP.
- Dynamic DNS (DDNS):
If your cloud instance doesn’t have a static IP (and you don’t want to or can’t use an Elastic IP or similar), you can use Dynamic DNS services. These services update the DNS records automatically whenever the IP address of the hostname changes. Examples include No-IP and DynDNS.
- Scripted Updates: Automate the updating process using scripts on the server that run periodically (via cron jobs) and update the DDNS service with the current IP.
- Virtual Private Cloud (VPC) and Private Hosted Zones:
Services like Amazon’s VPC allow you to have control over your virtual networking environment, including selection of IP address range, creation of subnets, and configuration of route tables and network gateways. You can use VPC with Route 53 to create a private hosted zone and associate it with your VPC. This way, you can use your own friendly DNS names to route traffic within your VPC.
- Load Balancers:
If you’re using a cloud service that offers load balancers (like Amazon ELB or Google Cloud Load Balancer), you can set up the load balancer to distribute incoming traffic to your instances. These load balancers typically have a more stable hostname or IP. Point your domain or subdomain to the load balancer’s address.
- Content Delivery Networks (CDN):
CDNs like Cloudflare, Akamai, or Amazon CloudFront can be placed in front of your cloud resources. Not only do they cache content closer to the end-users for performance reasons, but they also provide a stable endpoint that can be mapped to your desired domain.
- Service Discovery Tools:
In microservices environments or container orchestration platforms like Kubernetes, services might be dynamically located and can change their location frequently. Service discovery tools like Consul, Eureka, or Kubernetes’ built-in DNS can provide consistent hostnames that automatically map to the changing addresses of these services.
When implementing any of these strategies, always consider the implications of caching, security, and redundancy. Ensure that the method you choose aligns with the architectural principles and business requirements of your application or service.