diff --git a/local/Jenkinsfile b/local/Jenkinsfile new file mode 100644 index 0000000..e33d985 --- /dev/null +++ b/local/Jenkinsfile @@ -0,0 +1,88 @@ +properties([ + buildDiscarder(logRotator(artifactDaysToKeepStr: '90', artifactNumToKeepStr: '7', daysToKeepStr: '', numToKeepStr: '')), + disableConcurrentBuilds(), + disableResume(), + parameters([ + text(defaultValue: '''# will be appended to terraform.tfvars +# can be used to override openvpn/ovpn-dco source branches +# e.g. +# openvpn_branch=release/2.6''', name: 'TERRAFORM_VARIABLES'), + string(description: 'Set arguments for all iperf servers', + name: 'IPERF_GLOBAL_SERVER_ARGS', trim: true), + string(defaultValue: '-t10', + description: 'Set arguments for all iperf clients', + name: 'IPERF_GLOBAL_CLIENT_ARGS', trim: true), + ]), + pipelineTriggers([[$class: 'PeriodicFolderTrigger', interval: '30m']]) +]) + +def terraform_config() { + sh(label: 'terraform.tfvars', script: ''' +SANE_NAME=$(perl -wE 'my $n=lc($ARGV[0]);$n=~s/^.*%2f//;$n=substr($n,-30);$n=~s/[^a-z0-9-]/-/g;$n=~s/^-*//;print($n)' "${JOB_BASE_NAME}") +cat <"$LOG_DIR"/$TEST_NAME.ovpn_server.log 2>&1 & + ovpn_server_ssh_pid=$! + sleep 1 + $SSH "ubuntu@$SERVER" sudo iperf $IPERF_GLOBAL_SERVER_ARGS -s >"$LOG_DIR"/$TEST_NAME.iperf_server_tcp.log 2>&1 & + $SSH "ubuntu@$SERVER" sudo iperf $IPERF_GLOBAL_SERVER_ARGS -u -s >"$LOG_DIR"/$TEST_NAME.iperf_server_udp.log 2>&1 & +} + +start_client() { + TEST_NAME="$TEST_COUNT:$1" + OVPN_ARGS="$2" + $SSH "ubuntu@$CLIENT" sudo $OPENVPN_TESTS_PATH/openvpn --cd $OPENVPN_TESTS_PATH/client \ + --config client.conf $OVPN_ARGS --remote "$SERVER" \ + >"$LOG_DIR"/$TEST_NAME.ovpn_client.log 2>&1 & + ovpn_client_ssh_pid=$! + sleep 5 + $SSH "ubuntu@$CLIENT" sudo iperf $IPERF_GLOBAL_CLIENT_ARGS -c 10.199.2.1 >"$LOG_DIR"/$TEST_NAME.iperf_client_tcp.log 2>&1 + $SSH "ubuntu@$CLIENT" sudo iperf $IPERF_GLOBAL_CLIENT_ARGS -u -c 10.199.2.1 >"$LOG_DIR"/$TEST_NAME.iperf_client_udp.log 2>&1 + $SSH "ubuntu@$CLIENT" sudo iperf $IPERF_GLOBAL_CLIENT_ARGS -c "$SERVER" >"$LOG_DIR"/$TEST_NAME.iperf_client_novpn_tcp.log 2>&1 + $SSH "ubuntu@$CLIENT" sudo iperf $IPERF_GLOBAL_CLIENT_ARGS -u -c "$SERVER" >"$LOG_DIR"/$TEST_NAME.iperf_client_novpn_udp.log 2>&1 +} + +deep_cleanup() { + $SSH "ubuntu@$SERVER" sudo killall $OPENVPN_TESTS_PATH/openvpn || true + $SSH "ubuntu@$SERVER" sudo killall iperf || true + $SSH "ubuntu@$CLIENT" sudo killall $OPENVPN_TESTS_PATH/openvpn || true + $SSH "ubuntu@$CLIENT" sudo killall iperf || true + sleep 5 +} + +post_test_handler() { + deep_cleanup + echo "Test $TEST_COUNT COMPLETED" + TEST_COUNT=$(( TEST_COUNT + 1 )) +} + +retrieve_logs() { + for log in syslog cloud-init-output.log; do + scp -o UserKnownHostsFile=known_hosts "ubuntu@$SERVER":/var/log/$log "$LOG_DIR"/server.$log + scp -o UserKnownHostsFile=known_hosts "ubuntu@$CLIENT":/var/log/$log "$LOG_DIR"/client.$log + done +} +trap retrieve_logs EXIT + +deep_cleanup + +if $RUN_NODCO; then + start_server nodco_udp "--disable-dco --proto udp6" + start_client nodco_udp "--disable-dco --proto udp6" + post_test_handler + + start_server nodco_tcp "--disable-dco --proto tcp6" + start_client nodco_tcp "--disable-dco --proto tcp6" + post_test_handler +fi + +if $RUN_DCO; then + start_server dco_udp "--proto udp6" + start_client dco_udp "--proto udp6" + post_test_handler + + start_server dco_tcp "--proto tcp6" + start_client dco_tcp "--proto tcp6" + post_test_handler +fi + +deep_cleanup diff --git a/local/server/server.conf b/local/server/server.conf new file mode 100644 index 0000000..324ce10 --- /dev/null +++ b/local/server/server.conf @@ -0,0 +1,15 @@ +port 51199 +dev tun +ca /root/openvpn-test-server/keys/ca.crt +cert /root/openvpn-test-server/keys/server.crt +key /root/openvpn-test-server/keys/server.key +dh /root/openvpn-test-server/keys/dh.pem +server 10.199.2.0 255.255.255.0 +server-ipv6 fd00:abcd:199:2::/64 +topology subnet +ifconfig-pool-persist ipp.txt 60 +writepid openvpn.pid +keepalive 10 30 +persist-key +status openvpn-status.log +verb 4 diff --git a/terraform/openvpn-server/main.tf b/terraform/openvpn-server/main.tf index 5d6087c..190dfc5 100644 --- a/terraform/openvpn-server/main.tf +++ b/terraform/openvpn-server/main.tf @@ -33,6 +33,13 @@ provider "aws" { created-by = "Terraform/OpenVPN/openvpn-tests/terraform/openvpn-server" } } + dynamic "assume_role" { + for_each = var.assume_role != "" ? toset([var.assume_role]) : [] + content { + role_arn = assume_role.value + session_name = var.cluster_name + } + } } data "aws_caller_identity" "current" {} @@ -40,7 +47,7 @@ data "aws_caller_identity" "current" {} module "pki" { source = "../openvpn-test-pki/" - cn = local.cn + cn = local.cn_server locality = var.cluster_name province = var.region } @@ -55,5 +62,6 @@ module "vpc" { locals { aws_account_id = data.aws_caller_identity.current.account_id - cn = "${var.dns_host_name}.${var.dns_zone_name}" + cn_server = "${var.dns_host_name}-server.${var.dns_zone_name}" + cn_client = "${var.dns_host_name}-client.${var.dns_zone_name}" } diff --git a/terraform/openvpn-server/outputs.tf b/terraform/openvpn-server/outputs.tf index 8f82c48..e643b16 100644 --- a/terraform/openvpn-server/outputs.tf +++ b/terraform/openvpn-server/outputs.tf @@ -9,6 +9,9 @@ output "clients" { value = module.pki.clients sensitive = true } -output "cn" { - value = local.cn +output "cn_server" { + value = local.cn_server +} +output "cn_client" { + value = local.cn_client } diff --git a/terraform/openvpn-server/server.tf b/terraform/openvpn-server/server.tf index 3eba862..0b52bda 100644 --- a/terraform/openvpn-server/server.tf +++ b/terraform/openvpn-server/server.tf @@ -1,9 +1,9 @@ -data "aws_ami" "ubuntu2004" { +data "aws_ami" "ubuntu2204" { owners = ["099720109477"] filter { name = "name" - values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20220901"] + values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-20230711"] } filter { @@ -26,7 +26,7 @@ data "cloudinit_config" "ubuntu_server" { part { content_type = "text/cloud-config" content = jsonencode({ - packages = [ "awscli", "git", "net-tools" ] + packages = [ "awscli", "git", "iperf", "net-tools" ] package_update = true package_upgrade = false package_reboot_if_required = false @@ -42,12 +42,24 @@ data "cloudinit_config" "ubuntu_server" { { path = "/root/openvpn-test-server/keys/server.key" content = module.pki.server_key + permissions = "0o400" + }, + { + path = "/root/openvpn-test-server/keys/client.crt" + content = module.pki.clients["test_client"].cert + }, + { + path = "/root/openvpn-test-server/keys/client.key" + content = module.pki.clients["test_client"].key + permissions = "0o400" }, { path = "/root/openvpn-test-server/vars" content = <