CentOS 8 as my new router
I had to rebuild my router, and these are my notes. Hopefully Iwon’t have to look all this up again, in the future. I really feel like I do this more then I should.
IPv4 Forwarding
sudo sysctl -w net.ipv4.ip_forward=1 sudo vi /etc/sysctl.d/99-sysctl.conf # put the 'net' in this file
Static IP
Something I always seem to have to figure/google this. Here is a template to edit: /etc/sysconfig/network-scripts/ifcfg-
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="" DEVICE="" ONBOOT="yes" IPADDR=123.456.789.100 PREFIX=24 GATEWAY=123.456.789.1 DNS1=8.8.8.8
Fail2Ban
Being this is going to be in the internet, you should install fail2ban. I have take these notes from here.
sudo dnf install -y epel-release fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Now we need to make necessary changes in jail.local file to create ban rules. Editthis file in your favorite editor and make changes in [DEFAULT] section.
[DEFAULT] # "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban # will not ban a host which matches an address in this list. Several addresses # can be defined using space (and/or comma) separator. ignoreip = 127.0.0.1/8 192.168.1.0/24 # "bantime" is the number of seconds that a host is banned. bantime = 60m # A host is banned if it has generated "maxretry" during the last "findtime" seconds. as per below # settings, 2 minutes findtime = 5m # "maxretry" is the number of failures before a host get banned. maxretry = 5 [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=22, protocol=tcp] sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com, sendername="Fail2Ban"] logpath = /var/log/secure maxretry = 3
sudo systemctl start fail2ban.service sudo systemctl enable fail2ban.service
DNSMasq
A lot of these steps were taken from here. Thank you for writing it. My router is going to be my local DNS server and my DHCP server,there are a ton of options out there, dnsmasq is the easiestto combine the two. Install dnsmasq , enable and start it:
sudo dnf -y install dnsmasq sudo systemctl start dnsmasq sudo systemctl enable dnsmasq
DNS
First thing you want to do is edit the listen address for dnsmasq . My network is 172.16.10.0 so my .1 is mymachine.
listen-address=127.0.0.1,172.16.10.1
Uncomment expand-hosts to help with the machines thatcome and go. Also set your domain to your domain. 🙂
expand-hosts domain=asgharlabs.io
dnsmasq uses your resolv.conf as your upstream DNS and yourlocal hosts file as your local DNS entry. Confirm they are setup correctly now. If you need to make changes, NetworkManager will override yourchanges, so you need to make the file immutable:
sudo chattr +i /etc/resolv.conf sudo chattr -i /etc/resolv.conf sudo vi /etc/resolv.conf sudo chattr +i /etc/resolv.conf sudo lsattr /etc/resolv.conf
sudo firewall-cmd --add-service=dns --permanent sudo firewall-cmd --add-service=dhcp --permanent sudo firewall-cmd --list-all
DHCP
Now that we have a working dnsmasq instance, lets set up the DHCP part. Edit the dhcp-range in the /etc/dnsmasq.conf
dhcp-range=172.16.10.100,172.16.10.250,12h
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases dhcp-authoritative
sudo systemctl restart dnsmasq
firewalld configuration
Now that you have DNS and DHCP running, you need to make sureyour router actually routes things. You need to add masquerade to your firewalld chain.
sudo firewall-cmd --add-masquerade --permanent sudo firewall-cmd --reload
OpenVPN configuration
Now that you have a working router, you probably want to VPNinto your network. Lets get OpenVPN up and running. First thing you need to do is install git and pull down Nyr ’s repofor automaticly configuring openvpn .
cd ~ sudo dnf -y install git git clone https://github.com/Nyr/openvpn-install.git
cd openvpn-install sudo chmod +x openvpn-install.sh ./openvpn-install.sh
Follow the prompts… EDIT: It seems I couldn’t get “across” my network, so I had to edit the /etc/openvpn/server/server.conf with the following:
push "route 172.16.10.0 255.255.255.0"
Now I can get to my internal network, which is what I was hoping for. Congrats! You now have a working router/vpn machine!
Настройка Интернет шлюза на CentOS
Обновлено: 17.08.2021 Опубликовано: 27.06.2017
Процесс настройки шлюза (NAT) на системах UNIX, обычно, выполняется в несколько команд: включением перенаправления на уровне системы и настройкой firewall.
Настройка системы
Все что нужно настроить — включить перенаправления на уровне ядра. Для этого открываем следующий файл:
И добавляем в него следующую строку:
После применяем настройку:
В случае с единым сетевым интерфейсом больше ничего делать не потребуется — CentOS начнет работать как Интернет-шлюз.
В случае с несколькими сетевыми адаптерами, настраиваем сетевой экран.
Настройка брандмауэра
Рассмотрим настройку фаервола при помощи двух различных популярных утилит — firewalld и iptables.
Firewalld
Настройка выполняется для двух сетевых интерфейсов — ens32 (внутренний) и ens34 (внешний):
firewall-cmd —direct —permanent —add-rule ipv4 nat POSTROUTING 0 -o ens34 -j MASQUERADE
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens32 -o ens34 -j ACCEPT
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens34 -o ens32 -m state —state RELATED,ESTABLISHED -j ACCEPT
systemctl restart firewalld
Iptables
Настройка выполняется из расчета, что Интернет настроен через интерфейс ens160, а внутренняя сетя через ens32:
iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE
Если на сервере для доступа в локальную и глобальную сети используются разные сетевые интерфейсы, нам может понадобиться создать еще два правила:
iptables -A FORWARD -i ens32 -o ens160 -m state —state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ens32 -o ens160 -j ACCEPT
yum install iptables-services
Проброс портов (Port Forwarding)
Необходим для перенаправление сетевых запросов на сервер, стоящий за NAT и не имеющий прямого выхода во внешнюю сеть. Настройки отличаются в зависимости от способа управления брандмауэром netfilter.
Firewalld
firewall-cmd —zone=external —permanent —add-forward-port=port=25:proto=tcp:toport=8025:toaddr=192.168.0.15
* где 25 — прослушиваемый внешний порт, для которого сработает перенаправление; tcp — используемый транспортный протокол; 8025 — на какой порт перенаправить запрос; 192.168.0.15 — IP-адрес сервера, на который отправляем запросы.
* также обратите внимание, что в команде мы используем зону external, но в вашей среде она может и не использоваться. Посмотреть список активных зон можно командой firewall-cmd —get-active-zones.
firewall-cmd —permanent —zone=external —add-port=25/tcp
Чтобы правило вступило в силу:
Iptables
Настройка выполняется двумя командами и двумя спомобами.
iptables -t nat -I PREROUTING -p tcp -m tcp -d 10.8.232.111 —dport 25 -j DNAT —to-destination 192.168.0.15:8025
iptables -t nat -I POSTROUTING -p tcp -m tcp -s 192.168.0.15 —sport 8025 -j SNAT —to-source 10.8.232.111:25
iptables -t nat -I PREROUTING -p tcp -i eth0 —dport 25 -j DNAT —to-destination 192.168.0.15:8025
iptables -I FORWARD -p tcp -d 192.168.0.15 —dport 8025 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
* где eth0 — внешний сетевой интерфейс.
iptables -I INPUT 1 -p tcp —dport 8025 -j ACCEPT
* обратите внимание, что мы разрешаем порт, на который переводим запрос, так как цепочки POSTROUTING и PREROUTING работают до цепочки FILTER, а потому открывать нужно не входящий порт (25), а тот, на который назначается пакет (8025).
Не забываем сохранить правила:
Роутер на CentOS Stream 8.3
Подробная инстукция по установке и настройке роутера в связке FirewallD + dnsmasq на CentOS Stream 8.3.
Исходные данные
Имеем на машине 2 сетевых интерфейса:
enp0s3 — для внешней сети 192.168.1.0/24
enp0s8 — для внутренней сети 192.168.52.0/24
Также у нас есть шлюз во внешней сети. Это маршрутизатор с IP-адресом 192.168.1.1
Наша задача — настроить доступ в Интернет для внутренней сети.
В первую очередь открываем файл /etc/sysctl.conf
и в нём в самом конце прописываем строчку:
Теперь при выполнении команды
консоль покажет такой результат:
Запускаем FirewallD и включаем его в автозагрузку:
# systemctl start firewalld # systemctl enable firewalld
Включаем поддержку NAT (masquerade)
# firewall-cmd --add-masquerade --permanent
Loaded: loaded Active: active (running)
Проверим состояние службы FirewallD
затем откроем файл /etc/dnsmasq.conf
и пропишем в него такой конфиг:
domain-needed bogus-priv interface=enp0s8 resolv-file=/etc/resolv.conf dhcp-range=192.168.50.31,192.168.50.130,24h cache-size=150
Включаем доступ к службам dns и dhcp в файрволл
# firewall-cmd --permanent --zone=public --add-service=dhcp # firewall-cmd --permanent --zone=public --add-service=dns
Затем включаем службы dnsmasq в автозагрузку и запускаем
# systemctl enable dnsmasq # systemctl start dnsmasq