summaryrefslogtreecommitdiff
path: root/Terraform/Azure/VPN-Server-WireGuard/loadbalancer.tf
diff options
context:
space:
mode:
Diffstat (limited to 'Terraform/Azure/VPN-Server-WireGuard/loadbalancer.tf')
-rw-r--r--Terraform/Azure/VPN-Server-WireGuard/loadbalancer.tf109
1 files changed, 109 insertions, 0 deletions
diff --git a/Terraform/Azure/VPN-Server-WireGuard/loadbalancer.tf b/Terraform/Azure/VPN-Server-WireGuard/loadbalancer.tf
new file mode 100644
index 0000000..7731df9
--- /dev/null
+++ b/Terraform/Azure/VPN-Server-WireGuard/loadbalancer.tf
@@ -0,0 +1,109 @@
+# Create Load Balancer
+resource "azurerm_lb" "azurerm_lb_vyos_vpn_lb" {
+ name = join("-", [var.prefix, "VyOS", "VPN", "Pub", "LB"])
+ location = var.location
+ resource_group_name = var.resource_group
+ sku = "Standard"
+ tags = var.tags
+
+ frontend_ip_configuration {
+ name = "PublicIPAddress"
+ public_ip_address_id = azurerm_public_ip.azure_vnet_public_address_lb.id
+ }
+}
+
+resource "azurerm_lb_backend_address_pool" "azure_lb_pool" {
+ name = "BackEndAddressPool"
+ loadbalancer_id = azurerm_lb.azurerm_lb_vyos_vpn_lb.id
+}
+
+resource "azurerm_lb_probe" "azure_lb_probe" {
+ name = "VyOS_Test"
+ loadbalancer_id = azurerm_lb.azurerm_lb_vyos_vpn_lb.id
+ port = 22
+}
+
+resource "azurerm_lb_rule" "azure_lb_rule_wireguard" {
+ name = "WireGuard"
+ loadbalancer_id = azurerm_lb.azurerm_lb_vyos_vpn_lb.id
+ protocol = "Udp"
+ frontend_port = var.wg_server_port
+ backend_port = var.wg_server_port
+ frontend_ip_configuration_name = "PublicIPAddress"
+ probe_id = azurerm_lb_probe.azure_lb_probe.id
+ backend_address_pool_ids = [azurerm_lb_backend_address_pool.azure_lb_pool.id]
+ load_distribution = "SourceIPProtocol"
+ enable_floating_ip = false
+ disable_outbound_snat = true
+}
+
+resource "azurerm_network_interface_backend_address_pool_association" "vnet_VyOS" {
+ count = 2
+ network_interface_id = azurerm_network_interface.azure_vnet_vpn_net_nic[count.index].id
+ ip_configuration_name = "ifconfig-${count.index}"
+ backend_address_pool_id = azurerm_lb_backend_address_pool.azure_lb_pool.id
+ depends_on = [azurerm_network_interface.azure_vnet_vpn_net_nic]
+}
+
+resource "azurerm_lb_nat_rule" "azure_lb_nat_rule_dns_udp" {
+ resource_group_name = var.resource_group
+ loadbalancer_id = azurerm_lb.azurerm_lb_vyos_vpn_lb.id
+ name = "DNS-UDP"
+ protocol = "Udp"
+ frontend_port = 53
+ backend_port = 53
+ frontend_ip_configuration_name = "PublicIPAddress"
+}
+
+resource "azurerm_lb_nat_rule" "azure_lb_nat_rule_dns_tcp" {
+ resource_group_name = var.resource_group
+ loadbalancer_id = azurerm_lb.azurerm_lb_vyos_vpn_lb.id
+ name = "DNS-TCP"
+ protocol = "Tcp"
+ frontend_port = 53
+ backend_port = 53
+ frontend_ip_configuration_name = "PublicIPAddress"
+}
+
+resource "azurerm_lb_nat_rule" "azure_lb_nat_rule_http" {
+ resource_group_name = var.resource_group
+ loadbalancer_id = azurerm_lb.azurerm_lb_vyos_vpn_lb.id
+ name = "HTTP"
+ protocol = "Tcp"
+ frontend_port = 80
+ backend_port = 80
+ frontend_ip_configuration_name = "PublicIPAddress"
+}
+
+resource "azurerm_lb_nat_rule" "azure_lb_nat_rule_https" {
+ resource_group_name = var.resource_group
+ loadbalancer_id = azurerm_lb.azurerm_lb_vyos_vpn_lb.id
+ name = "HTTPS"
+ protocol = "Tcp"
+ frontend_port = 443
+ backend_port = 443
+ frontend_ip_configuration_name = "PublicIPAddress"
+}
+
+resource "azurerm_lb_nat_rule" "azure_lb_nat_rule_ssh" {
+ resource_group_name = var.resource_group
+ loadbalancer_id = azurerm_lb.azurerm_lb_vyos_vpn_lb.id
+ name = "SSH"
+ protocol = "Tcp"
+ frontend_port_start = 21
+ frontend_port_end = 22
+ backend_port = 22
+ backend_address_pool_id = azurerm_lb_backend_address_pool.azure_lb_pool.id
+ frontend_ip_configuration_name = "PublicIPAddress"
+}
+
+resource "azurerm_lb_outbound_rule" "azurerm_lb_outbound_WG_out" {
+ name = "OutboundRule"
+ loadbalancer_id = azurerm_lb.azurerm_lb_vyos_vpn_lb.id
+ protocol = "All"
+ backend_address_pool_id = azurerm_lb_backend_address_pool.azure_lb_pool.id
+
+ frontend_ip_configuration {
+ name = "PublicIPAddress"
+ }
+}