As the title says, this is about building a pfSense 2.0 virtual machine on ESXi 5.0. This is not about teaching you how to install ESXi and it is not about how to configure pfSense to do any of the many amazing things it can. However, you should have a basic, working pfSense virtual machine at the end of this.
Disclaimer/flame-retardant: If you’re going to be running pfSense as a perimeter firewall for an organization and want to minimize the “attack surface”, many will say it is preferable to run it unvirtualized on stand-alone hardware. I’ll leave that decision to you. Now back to the topic.
We’re going to start at the point where we have a virgin ESXi 5.0 install and have connected to it using the vSphere client. If you already have other VMs running on ESXi you probably don’t need to follow the networking steps too closely. However, I recommend skimming through it to see what is suggested before building the pfSense virtual machine part.
In the vSphere client you can see the network diagram for your ESXi host by clicking Networking on the Configuration tab:
After you installed ESXi, before you could connect to it with the vSphere client, you had to nominate a physical network adapter (a “vmnic” in the diagram) which would be the ESXi Management Network. You also had to assign an IP address to the ESXi host's Management Network interface, either through DHCP or manually through the console.
The network diagram above shows that I've assigned the Management Network to vmnic0 and gave it an IP address of 192.168.111.30. (192.168.111.0/24 is my home LAN. Yours will probably be different.) Whatever subnet you've chosen, the VMkernel Port in the diagram is your Management Network and that’s what your vSphere client is now talking to.
ESXi will name the first physical NIC it finds “vmnic0″. If vmnic0 is your management interface, ESXi will have automatically attached a virtual switch, vSwitch0, to that interface.
In addition to the VMkernel port, ESXi will also attach a Virtual Machine Port Group to the vSwitch. In the diagram above it's labeled as "Virtual Machine Network". The VM Port group is where Virtual Machines can be attached to this virtual network.
In summary, in the above diagram, vSwitch0 has both a VM Port Group (Virtual Machine Network) and a VMkernel Port (Management Network) attached.
In a small network it is quite common to use the Virtual Machine Port Group on vSwitch0 to provide the LAN interface for your pfSense. That allows you to access the LAN side of your pfSense virtual machine and manage your ESXi host, with the vSphere client, from a single PC. Of course, the virtual machine (e.g., pfSense) and the ESXi management interface must have different IP addresses.
COMMENT: I must say here that I always separate the ESXi Management network from other networks. I won’t go into the detail but there are some very good reasons for doing this. Without using VLANs, though, separation would mean that you need an additional NIC on the ESXi host just for ESXi management. What’s more, you would also need another NIC in your vSphere client PC to connect to the management NIC in your ESXi host. If you want to follow that path and you have enough NICs, simply delete the Virtual Machine Port Group by clicking the Properties link above vmnic0, highlight the VM Port Group and click Remove.
Assuming you are just working with just two NICs in your ESXi host, rename the VM Port Group from "Virtual Machine Network" to something a bit more meaningful. Click the Properties… link for vmnic0:
Highlight the Virtual Machine Network and click the Edit button.
Change the Network label to “LAN” and click OK then Close.
You’ll see how this makes life a little easier when we assign virtual network interfaces to pfSense.
As we’re not going to deal with VLANs here, you will need a second physical NIC in your ESXi host. This will be your WAN interface.
HINT: If you have multiple physical interfaces in your ESXi host, it can be a bit of a struggle to work out which one has been identified as vmnic1, vmnic2 and so on. If you wrote down the MAC address of each NIC and the slot it occupied when you put it in the machine, you’re in business – just look at the Network Adapters screen under the Configuration tab to match up the MAC addresses (new to ESXi 5). However, you probably didn’t think do that so the easiest way match physical NICs to vmnics is to plug a PC or switch into them, one at a time. The speed and duplex on the Networking or Network Adapters screens should change as the interface comes up. Because VMware didn’t provide a Refresh link on the Network Adapters screen, you may have to refresh by navigating to somewhere else then going back.
Now we need to link the second physical NIC (vmnic1), to a new vSwitch. Click the Add Networking link at the top right of the Networking screen and the following dialog will appear.
We are adding a Virtual Machine network so select that option and click Next.
We want this NIC to be attached to a new vSwitch so select Create a virtual switch and check vmnic1. Click Next.
As we did with the LAN, let’s give this VM Port Group a more meaningful name of “WAN”. Click Next.
The next dialog simply lets you check that everything looks OK. Click Finish.
Your networking diagram should now look like this:
Now we can configure a new virtual machine on which pfSense will be installed.
Right click your ESXi host in the left pane of the vSphere client and select New virtual machine…
In the Configuration window, I always like to take the Custom option. (I’ve never really trusted what someone else thinks is “typical”). Click Next
In the Name and Location window, let’s give the virtual machine a meaningful name like “pfSense” and click Next
Now we need to decide where disk storage will be allocated to hold the virtual machine's configuration and operating files. (This is not necessarily the same location as the file system for pfSense, as you'll see later. ) There are two datastores on this server – a small 80GB drive on which ESXi is installed and a 500GB disc which is just for virtual machine storage. Highlight a datastore from your list and click Next.
|Note that for ESXi 5.5 the default virtual machine version is 10. However, if you select version 10 with the FREE version of ESXi 5.5, you will not be able to edit the virtual machine settings through the vSphere client. Use virtual machine version 8.|
Here is where you tell ESXi the virtual machine version you want to use for pfSense. Note the warning above. Select version 8 and Click Next.
If you’re really new to pfSense you may not have noticed that it’s built on the FreeBSD operating system, not Linux. Select Other and chose FreeBSD (32-bit) or FreeBSD (64-bit).
Probably the most noticeable difference between the 32 and 64-bit versions is that counters on the 32-bit version, such as the number of bytes sent and received, will go back to zero after about 4GB. On the 64-bit version it will take a lot longer to reach the limit.
That said, the 32-bit version is by far the most widely deployed and tested. As you will see a few steps later, the amount of memory needed to run pfSense is unlikely to require a 64-bit operating system. I would recommend that you take the FreeBSD (32-bit) option but, whatever you choose, it must match pfSense ISO image you're going to install. Click Next.
To get started, a single-socket, single-core configuration will do for now. You can always change this and other virtual machine settings later if you want. Click Next
Depending on the number and type of packages you intend to install, a basic pfSense VM should run very, very comfortably in 512MB. A lot of simple, non-virtual installations run on old PCs with 256MB and less.
If you’re really squeezed for physical RAM on your host - perhaps because you intend to run lots of other virtual machines - you could cut back the allocation to the pfSense VM to, say, 384MB. If you intend to run lots of memory-hungry packages give it more.
To change the memory allocation to one of the sizes shown on the scale of the memory "thermometer", click that value on the scale. Click Next
Remember that your two virtual networks were renamed to LAN and WAN. This is where we attach those networks to our pfSense virtual machine.
Select the number of virtual NICs you want to assign to pfSense. In this case it will be 2. Now, using the drop-down lists assign your virtual machine’s NIC 1 to the LAN network. Assign NIC 2 to WAN. (This is why we gave the virtual machine port groups these names – much easier to recognize.)
Note that for each NIC you can also select an Adapter type. Different adapter types may give better or worse performance (and some may not work at all) but you’ll have to study that elsewhere. To get started, choose the dependable E1000 type for each adapter. Make sure that Connect at Power On is checked and click Next.
An emulation of an LSI Logic SCSI controller is offered on this system and, as far as I know, the recommendation is based on the operating system of the virtual machine you intend to install. Accept the default and click Next.
This is where the operating system will build its file system.
Choose Create a new virtual disk and click Next.
Here you can see that I’ve given pfSense's virtual disk a capacity of 8GB but I have quite a lot to spare and 8GB isn’t really that much these days.
Under Location, keep the virtual machine’s hard disk with the virtual machine itself. If you want to learn more about this set of options, read the help.
Like it says – these options do not normally need to be changed. Next.
Now you'll see a summary of what you've configured for this virtual machine.
Before you finish, check the box Edit virtual machine settings before completion. The label on the Finish button will change to Continue. This will allow you to set up the boot CD from which we’ll install pfSense. Click Continue.
In the Virtual Machine Properties dialog select the Hardware tab and then the line New CD/DVD (Adding) line. In the right-hand pane choose the location of the CD/DVD drive:
If you have a CD/DVD in your ESXi host, select the CD/DVD drive and check Connect at power on. This change allows you to pop the pfSense CD/DVD into the host’s drive and start installing a soon as you power on the virtual machine.
If you want to install from the CD/DVD drive in your vSphere Client PC, select the Client Device option. As the contents of the CD will be read across your network, this will be a bit slower than using a drive in your ESXi host. In addition, Connect at power on is not available.
ISO If you want to install from an ISO image stored in an ESXi datastore, that is also an option but it won’t be covered here.
Option 1: Installing from the ESXi host’s CD/DVD drive
Option 2: Installing from your client’s CD/DVD drive
If everything has gone well you will soon see the pfSense boot menu.
What follows is very much a standard pfSense installation procedure. However, it's included here to save you jumping around between documents.
NOTE that to enter information through the virtual machine's console you must click inside the console window. To release the cursor, press Ctl+Alt.
You can allow the timer to expire and boot pfSense from the “Live CD”.
When you see the following console message:
Type “i” to launch the pfSense installer.
The next few screens are the standard pfSense install screens and are fairly self explanatory. Take the highlighted choice in each of the following screenshots:
At this point the pfSense virtual machine will reboot and you should remove the CD from the drive.
Next up, the pfSense boot menu returns.
As pfSense is already installed on the virtual disk, just allow the timer to expire.
Once pfSense has booted you will see the message: Network interface mismatch – Running interface assignment option. This just means that you haven’t yet told pfSense which virtual network interface is LAN and which is WAN.
First of all, though, as you don’t need to assign VLANs, type n and press return.
The order that the virtual NICs were assigned to pfSense when you set up the virtual machine is important here. ESXi presents those network interfaces to pfSense in sequence. That is, your pfSense virtual machine sees NIC 1 (LAN) as em0, NIC 2 (WAN) as em1, etc.
Note that the MAC addresses assigned to the virtual NICs and seen by pfSense are also virtual. They are not the MAC addresses of the physical NICs. If you've forgotten which network (LAN or WAN) was assigned to which virtual NIC, right-click the virtual machine and choose Edit settings. You can see the NIC to Network association in there.
So go ahead and enter the WAN interface name, "em1", and press return.
Now enter the LAN interface name, "em0", and press return.
As we don’t have any OPT interfaces, yet, press return.
Lastly, check that you’ve got the interface assignments around the right way, enter "y" and press return.
After a short interval pfSense will reconfigure itself, restart and you should be presented with the main pfSense screen, above.
If you had your modem connected to the physical WAN port of your ESXi host, you'll see that the WAN interface has received an IP address, via DHCP, from your ISP or your modem. Other types of WAN connections and configurations are beyond the scope of this article. You'll need to go elsewhere to read up on those.
The LAN interface has its installation default IP address of 192.168.1.1. If want to use another network address and/or subnet you’ll need to start reading the pfSense documentation. Remember that my LAN, as shown at the beginning, was 192.168.111.0/24
Having a WAN and a LAN is fine but perhaps you would like to add another virtual machine to your virtual network – maybe a mail server or a web server. After all, that is likely to be one of the reasons you decided to use ESXi in the first place – as an alternative to running multiple physical machines.
You probably want to make these servers accessible from the Internet but, at the same time, protect them by putting them behind your pfSense firewall. That way you can control all access to them from both the LAN and the WAN.
Another interesting aspect of virtualization is that you don't have to stop at one DMZ. Because the DMZ network can be completely virtual, you don't need any additional physical NICs. You could, for example, attach a virtual mail server to one DMZ and a virtual web server to another. Then, by connecting them through pfSense with virtual NICs, you can fully control all access between the DMZs. In addition, if one server is compromised, access to any of the others will be just that little but harder.
That's not to say that a DMZ can't also be connected to a real physical network as well. You may want to connect a game console or video/music server behind pfSense but not have it directly connected to your LAN. All you need to do is connect a physical NIC to the DMZ.
Go to your vSphere client and highlight your ESXi host. Click the Configuration tab and the Networking link. You will see your ESXi network diagram.
Click the Add Networking link near the top right of the Network pane.
We want to add a new virtual machine network, so select that option and click Next.
Chose the option to Create a vSphere standard switch. We aren’t going to need a physical NIC – it’s just going to be virtual - so just make sure that, if you have more physical NICs in your ESXi host, none of them are selected, then click Next
As with the LAN and WAN, give the new network a name. “DMZ” would be good. Click Next.
Now your Networking diagram will look like this - just a vSwitch and a Virtual Machine Port group called “DMZ” with no physical NICs attached.
The next step is to connect the pfSense to this new DMZ network. Right-click your pfSense virtual machine and select Edit Settings. Click the Add button.
Choose Ethernet adapter and click Next.
As you did for LAN and WAN, choose the E1000 type of virtual network adapter. Select DMZ from the drop-down list of available networks and choose Connect at power on. Click Next.
Now your network diagram should look like the above.
Note that you can do all of this while the pfSense virtual machine is still running. To make pfSense aware of the changes, though, you will need to restart it and go through assigning the interfaces again.
Now you can attach additional virtual machines to the DMZ network.
There are a number of benefits to installing the VMware tools, including better memory management, as well as improved network and disk performance. I can't vouch for those benefits but I find the most useful feature is the ability to shutdown or reboot a virtual machine without needing to log in to it directly. I use this to have all my VMs and the ESXi host gracefully shutdown in the event of a power outage that might exhaust the UPS battery ... but that's another story.
The VMware Tools have been made available as a pfSense package, which makes the install very quick and easy.
Log in to the pfSense Web GUI and click System > Packages.
From the Available Packages list, look for the Open-VM-Tools package and click the + button on the right to install the package. Confirm that you want to install the package.
There is really nothing to configure with this package, it should just work.
Alternately, the official VMware tools can be used, but it is a much more manual process. See here: VMware Tools
Vmware Tools will allow you to have the clock of the pfSense virtual machine synchronized with the clock of the ESXi host. You would need to have the ESXi host use NTP to maintain its own clock for that to work but you also need to disable NTP on the pfSense virtual machine.
Unfortunately, using the host to control the clock of the pfSense virtual machine has been known to cause a problem with the time appearing, to pfSense, to run backwards.
My recommendation is to have pfSense and the ESXi host maintain their clocks independently.
You should never use a virtual machine as a time source for the ESXi host.
Some more information can be found in this VMware document: Timekeeping in Virtual Machines