summarylogtreecommitdiffstats
path: root/dnsch.sh
blob: 1bcf6527688935c58cd6dad6828a10d1eba93407 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/bash

# Check if the script is run as root
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi

# Backup the original resolv.conf file only if a backup doesn't exist yet
if [[ ! -e /etc/resolv.conf.bak ]]; then
    cp /etc/resolv.conf /etc/resolv.conf.bak
fi

# Function to print usage instructions
usage() {
    echo "Usage: $0 {g|sh|ag|cf|403|bg|rd|el} [-c|--clear] [-s|--set]"
    exit 1
}

# Verify the number of arguments provided
if [[ $# -lt 1 ]]; then
    usage
fi

# Parse the arguments
if [[ $1 == "-s" || $1 == "--set" ]]; then
    # Check if exactly two IP addresses are provided
    if [[ $# -ne 3 ]]; then
        usage
    fi
    # Set the nameservers based on provided IP addresses
    nameservers=("nameserver $2" "nameserver $3")
elif [[ $1 == "-c" || $1 == "--clear" ]]; then
    nameservers=()
else
    # Define the nameservers to add based on input argument
    case $1 in
        g)
            nameservers=("nameserver 8.8.8.8" "nameserver 8.8.4.4")
            ;;
        sh)
            nameservers=("nameserver 178.22.122.100" "nameserver 185.51.200.2")
            ;;
        ag)
            nameservers=("nameserver 176.103.130.130" "nameserver 176.103.130.131")
            ;;
        cf)
            nameservers=("nameserver 1.1.1.1" "nameserver 1.0.0.1")
            ;;
        403)
            nameservers=("nameserver 10.202.10.202" "nameserver 10.202.10.102")
            ;;
        bg)
            nameservers=("nameserver 185.55.226.26" "nameserver 185.55.225.25")
            ;;
        rd)
            nameservers=("nameserver 10.202.10.10" "nameserver 10.202.10.11")
            ;;
        el)
            nameservers=("nameserver 78.157.42.100" "nameserver 78.157.42.101")
            ;;
        *)
            echo "Invalid option: $1"
            usage
            ;;
    esac
fi

# Remove all existing nameservers and add new ones atomically
# This avoids potential issues with an empty or partial file
{
    > /etc/resolv.conf.new
    for ns in "${nameservers[@]}"; do
        echo "$ns"
    done
} > /etc/resolv.conf.new

# Safely move the new file to the actual resolv.conf location
mv -f /etc/resolv.conf.new /etc/resolv.conf || { echo "Failed to update resolv.conf"; exit 1; }

# Confirm the changes
echo "The resolv.conf file has been updated:"
cat /etc/resolv.conf