Macos NAT2
Материал из noname.com.ua
Mac OS NAT V2
Это порсто проверенный пример который работает, без особых подробностей
- pf нужно использовать динамическую подстановку адреса интерфейса — так NAT «подтянет» новый IP при переподключении VPN.
-> (utun0), а не -> utun0
- вынесите правила в отдельный anchor-файл и подключить его из
pf.conf
Отдельный файл с NAT
/etc/pf.anchors/nat-utun
# что транслируем - только адрес ноута
LAN_NET = "192.168.22.253/32"
VPN_IF = "utun0"
set skip on lo0 # не трогаем localhost
# NAT: адрес берётся динамически с интерфейса (в скобках!)
nat on $VPN_IF from $LAN_NET to any -> ($VPN_IF)
# Разрешим исходящий трафик из LAN в VPN
pass out on $VPN_IF inet proto { tcp udp icmp } from $LAN_NET to any keep state
# Если Mac роутит для вашей LAN: разрешите форвардинг с LAN-интерфейса (подставьте его имя)
# Например, если клиенты заходят через Wi-Fi интерфейс en0:
pass in on en0 inet from $LAN_NET to any keep state
pass out on $VPN_IF from $LAN_NET to any keep state
Скобки вокруг ($VPN_IF) — ключевое: pf будет автоматически использовать текущий адрес интерфейса, даже если он поменялся после переподключения VPN.
Подключить anchor из pf.conf
/etc/pf.conf (добавьте строки, не ломая apple-якоря):
anchor "nat-utun-cato" load anchor "nat-utun-cato" from "/etc/pf.anchors/nat-utun-cato"
Включите форвардинг разово
до перезагрузки
sudo sysctl -w net.inet.ip.forwarding=1
Полезно
проверка синтаксиса
sudo pfctl -nf /etc/pf.conf
загрузить правила
sudo pfctl -f /etc/pf.conf
включить pf (если был выключен)
sudo pfctl -e
посмотреть NAT-правила
sudo pfctl -sn
посмотреть состояния/NAT
sudo pfctl -s state -v