У меня есть два интерфейса, VLAN 202 и tap0. VLAN 202 является мой VLAN для клиентов VPN, и первоначально я просто раньше туннелировал все мои клиенты VPN на случайную подсеть и сделал, чтобы они совместно использовали мой IP хоста, но я хотел бы на самом деле сделать, чтобы мои клиенты туннелировали в и были выведены к VLAN клиентов VPN. Этот сервер я продолжаю работать, НЕ является основным маршрутизатором и является просто сервером со ссылкой на VLAN. Я хочу сделать это так, все клиенты вынуждены говорить с моим маршрутизатором и маршрутизатором наклона к другим VLAN при помощи моей таблицы маршрутизации серверов.
Короче говоря я хочу соединить интерфейсы мостом без любого дюйм/с на сервере на том VLAN. Я просто хочу, чтобы мои клиенты были выведены на VLAN, как будто концентратор был там. (Просто берущий все пакеты, полученные в одном интерфейсе и ставящий их другой.)
Я все еще очень плохо знаком с Таблицами IP, но я буквально потратил 8 + часы в этой точке.
Моя конфигурация сервера OpenVPN:
; Connection Details
local 10.10.3.2
port 25000
;proto tcp
proto udp
dev tap0
;dev tun
; Keys & Certs
ca ca.crt
cert SP.crt
key SP.key
dh dh4096.pem
tls-auth ta.key 0
; Subnet for Clients
server-bridge 10.20.8.1 255.255.255.0 10.20.8.2 10.20.8.254
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
; Encryption Settings
cipher AES-256-CBC
auth SHA256
; Compression Settings
;compress lz4-v2
;push "compress lz4-v2"
max-clients 10
; Security Settings to Avoid Attacks
user nobody
group nogroup
persist-key
persist-tun
; Logging
status /var/log/openvpn/openvpn-status.log
;log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/openvpn.log
verb 3
;mute 20
Моя конфигурация таблицы IP:
# START OPENVPN RULES
# Mangle table rules
*mangle
:PREROUTING ACCEPT [0:0]
# Custom Chains
-N V202
-A V202 -i tap0 -o vlan.202 -g POSTROUTING
-N TAP
-A TAP -i vlan.202 -o tap0 -g POSTROUTING
# TAP <-> vlan.202
-A PREROUTING -i vlan.202 -g TAP
-A PREROUTING -i tap0 -g V202
COMMIT
# END OPENVPN RULES
Найденный им! Я хотел избежать мостов с помощью дюйм/с, но не обязательно образую мост. Я смог зафиксировать это использование сценария, который я загрузил и отредактировал к следующему:
#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils
#################################
echo "Making tunnel..."
openvpn --mktun --dev tap0
echo "Creating bridge..."
brctl addbr bridge0
brctl addif bridge0 vlan.202
brctl setageing bridge0 0
echo "Adding tap interface to bridge"
brctl addif bridge0 tap0
echo "Setting tap rules..."
ifconfig tap0 0.0.0.0 promisc up
iptables -A INPUT -i tap0 -j ACCEPT
echo "Setting bridge rules"
iptables -A INPUT -i bridge0 -j ACCEPT
iptables -A FORWARD -i bridge0 -j ACCEPT
echo "Bringing up interface as promisc"
ifconfig vlan.202 0.0.0.0 promisc up
echo "Bringing up bridge"
ifconfig bridge0 up
Это эффективно делает мост, который ведет себя как концентратор.
Я могу быть неправым, но кажется будто Вы пытаетесь локально направить трафик удаленных клиентов VPN друг среди друга и других хостов на VLAN.
Если так, затем потому что Вы пытаетесь направить трафик, маршрутизация должна быть включена. Так, если это не было уже сделано, редактирование/etc/sysctl.conf и добавляет или не комментирует следующую строку:
net.ipv4.ip_forward=1
Затем или перезагрузка или выполненный:
sudo sysctl -p
Во-вторых, ВХОДНЫЕ И ВЫХОДНЫЕ цепочки только для пакетов, предназначенных для локального процесса или сокета (значение хоста), а не для пакетов, предназначенных для другой системы. Для последнего используйте ВПЕРЕД цепочка. Кроме того, таблица фильтра вероятна лучшее местоположение, чем искажение.
В-третьих,-j может быть лучше, чем-g для Вашего случая.
Я не протестировал это и не могу разумно прокомментировать, могла ли реализация интерфейса TUN быть лучшим подходом, но к передачам пакетов от касания до VLAN 202 я мог бы предложить:
iptables -A FORWARD -i tap -o vlan.202 -j ACCEPT
Пойти другим путем:
iptables -A FORWARD -i vlan.202 -o tap -j ACCEPT
Направить пакеты среди систем на VLAN (если не иначе выполненный):
iptables -A FORWARD -i vlan.202 -o vlan.202 -j ACCEPT
Направить пакеты среди систем на касании (снова, если не иначе выполненный):
iptables -A FORWARD -i tap -o tap -j ACCEPT
Можно совершенствовать эти правила с разбивкой по источникам, место назначения, протокол и порт, конечно.
Кроме того, эти правила не сохранятся через перезагрузку, таким образом, необходимо будет использовать, iptables-сохраняют и iptables-восстанавливают в сценариях запуска или включают вышеупомянутое iptables команды в сценарии, который работает при запуске. Пример systemd .service файл, который называет сценарий (названным iptables-rules.sh) при запуске:
# /etc/systemd/system/iptables-rules.service
[Unit]
Description=Run iptables rules at startup
Before=network-online.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c /etc/my-scripts/iptables-rules.sh
[Install]
WantedBy=multi-user.target
Другое исходное покрытие, как записать и сохранить сценарий (синтаксис легок; обязательно установите файл как исполняемый файл с помощью chmod), и как включить .service.
Удача и HTH.