Через несколько дней я буду работать над полевым оборудованием, состоящим из полдюжины устройств Centos, объединенных в сеть, но не подключенных к Интернету. Для работы (в частности, для применения обновлений) мне нужно будет временно подключить эти маленькие сети к Интернету.
Скорее всего, мое восходящее соединение будет через Wi-Fi-интерфейс моего ноутбука Fedora (а затем и далее через модем 4G). Общая идея состоит в том, чтобы выполнить NAT на моем ноутбуке, подключить его интерфейс Ethernet к полевой сети с подходящим локальным IP-адресом и временно установить его в качестве маршрута по умолчанию на полевых машинах.
Пока все хорошо, но возникает сложность из-за того, что некоторые обновления необходимо будет получать из сети нашей компании (через проприетарный клиент VPN на моем ноутбуке), а некоторые - из общедоступного Интернета. VPN-сервер не передает неофисный трафик в Интернет, ожидается, что клиенты будут маршрутизировать только «офисные» пакеты через VPN и отправлять Интернет-трафик напрямую.
Я не особо разбираюсь в маршрутизации, iptables и т. Д. Я взял эти фрагменты конфигурации, которые почти выполняют требуемый мне NAT:
iptables -A FORWARD -i $NAT_IF -j ACCEPT
iptables -A FORWARD -o $NAT_IF -j ACCEPT
iptables -t nat -A POSTROUTING -o $WAN_IF -j MASQUERADE
...где $NAT_IF
порт Ethernet моего ноутбука (локальная сторона) и $WAN_IF
это либо интерфейс Wi-Fi, либо ppp
интерфейс, созданный клиентом VPN. Таким образом, я могу позволить клиентским машинам подключаться либо к Интернету, либо к офису компании, но не к обоим сразу. Это не очень удобно, когда dnf update
команде может потребоваться извлечь как общедоступные RPM, так и некоторые проприетарные пакеты компании.
К сожалению, сейчас я не могу попробовать это, но, возможно, это так же просто, как дублировать последнюю строку выше, причем одна использует VPN как $ WAN_IF, а другая - интерфейс Wi-Fi. Однако я подозреваю, что нет, потому что он, похоже, ничего не делает, чтобы указать, какие пакеты должны идти вверх по интерфейсу ppp (что-либо для 10.0.0.0/8), а какие прямо к Wi-Fi (все остальное).
Что мне нужно сделать на моем ноутбуке (действующем как маршрутизатор), чтобы машины в локальной сети могли общаться как с офисом, так и с Интернетом, причем различие между ними очень предпочтительно проводить на ноутбуке, а не настраивать каждый клиент?
Спасибо за вашу помощь.
Чтобы различать маршрут движения, вам нужно добавить маршруты
ip route add 10.0.0.0/8 dev $VPN_IF
или
ip route add 10.0.0.0/8 via $TUNNEL_REMOTE_IP
Как его добавить, зависит от конфигурации вашего vpn.
Например: вы можете настроить дополнительные маршруты в графическом интерфейсе NetworkManager.
И, наверное, нужно замаскироваться под VPN так же, как и под WAN.
iptables -t nat -A POSTROUTING -o $VPN_IF -j MASQUERADE
Если VPN-сервер вашей компании ничего не знает о вашей подсети LAN.