Я хотел бы выполнить перенос с моего компьютера с macOS Sierra с IP-адресом 152.1.2.3 на мой NAS с адресом 192.168.2.3. В частности, я хотел бы получить доступ к веб-серверу HTTP на моем NAS по адресу 192.168.2.3/Photos. Весь трафик NAS, поступающий по HTTP, направляется в правильную папку (фотографии).
У меня включен общий доступ к Интернету, и я делюсь Ethernet-подключением моего компьютера с macOS (152.1.2.3 в Ethernet 2) к моему NAS (192.168.2.3 в Ethernet 1)
Мой NAS может видеть Интернет и получать обновления.
Я могу получить доступ к веб-серверу локально со своего компьютера, введя 192.168.2.3, и он направит меня на страницу веб-сервера по адресу 192.168.2.3/Photos.
Я просто не могу получить к нему доступ из-за пределов локальной сети.
Простое решение — подключить NAS напрямую к сети, но я не могу этого сделать из-за локальных политик.
В заключение: я хотел бы ввести следующее и быть перенаправленным на веб-сервер в NAS --> 152.1.2.3:9999
будет ли команда терминала:
rdr pass on en2 inet proto tcp from any to any port 9999 -> 198.168.2.3 port 80
Общий доступ к Интернету в macOS (внутренне) осуществляется путем создания устройства-моста, содержащего два или более интерфейсов, активации DHCP-сервера, настройки различных правил pf и включения pf.
Чтобы распечатать все правила, необходимо выполнить следующий сценарий оболочки:
pfdump.sh:
#!/bin/bash
function pfprint() {
if [ -n "$1" ];then
sudo pfctl -a "$2" -s"$1" 2>/dev/null
else
sudo pfctl -s"$1" 2>/dev/null
fi
}
function print_all() {
local p=$(printf "%-40s" $1)
(
pfprint r "$1" | sed "s,^,r ,"
pfprint n "$1" | sed "s,^,n ,"
pfprint A "$1" | sed "s,^,A ,"
) | sed "s,^,$p,"
for a in `pfprint A "$1"`; do
print_all "$a"
done
}
print_all
По умолчанию pf отключен со следующим дампом pf:
r scrub-anchor "com.apple/*" all fragment reassemble
r anchor "com.apple/*" all
n nat-anchor "com.apple/*" all
n rdr-anchor "com.apple/*" all
A com.apple
com.apple r anchor "200.AirDrop/*" all
com.apple r anchor "250.ApplicationFirewall/*" all
com.apple A com.apple/200.AirDrop
com.apple A com.apple/250.ApplicationFirewall
После активации Internet Sharing pf включается и дамп выглядит так:
r scrub-anchor "com.apple/*" all fragment reassemble
r scrub-anchor "com.apple.internet-sharing" all fragment reassemble
r anchor "com.apple/*" all
r anchor "com.apple.internet-sharing" all
n nat-anchor "com.apple/*" all
n nat-anchor "com.apple.internet-sharing" all
n rdr-anchor "com.apple/*" all
n rdr-anchor "com.apple.internet-sharing" all
A com.apple
A com.apple.internet-sharing
com.apple r anchor "200.AirDrop/*" all
com.apple r anchor "250.ApplicationFirewall/*" all
com.apple A com.apple/200.AirDrop
com.apple A com.apple/250.ApplicationFirewall
com.apple.internet-sharing r scrub-anchor "base_v4" all fragment reassemble
com.apple.internet-sharing r anchor "base_v4" all
com.apple.internet-sharing n nat-anchor "base_v4" all
com.apple.internet-sharing n rdr-anchor "base_v4" all
com.apple.internet-sharing A com.apple.internet-sharing/base_v4
com.apple.internet-sharing/base_v4 r scrub on en1 all no-df fragment reassemble
com.apple.internet-sharing/base_v4 r scrub on bridge100 all no-df max-mss 1460 fragment reassemble
com.apple.internet-sharing/base_v4 r scrub on bridge100 proto esp all no-df fragment reassemble
com.apple.internet-sharing/base_v4 r pass on en1 all flags any keep state
com.apple.internet-sharing/base_v4 r pass on en1 proto esp all no state
com.apple.internet-sharing/base_v4 r pass on bridge100 all flags any keep state rtable 6
com.apple.internet-sharing/base_v4 n nat on en1 inet from 192.168.2.0/24 to any -> (en1:0) extfilter ei
com.apple.internet-sharing/base_v4 n no nat on bridge100 inet from 192.168.2.1 to 192.168.2.0/24
com.apple.internet-sharing/base_v4 n rdr on bridge100 inet proto tcp from 192.168.2.0/24 to any port = 21 -> 127.0.0.1 port 8021
Здесь en1 — это внешний интерфейс (тот, который используется для вашей внутренней сети), а 192.168.2.0/24 — внутренняя сеть, предоставляемая DHCP-сервером. Оба могут отличаться в вашей среде.
Чтобы открыть общий доступ к внутреннему серверу с включенным Internet Sharing, вам необходимо перенаправить порт внешнего интерфейса на IP-адрес и служебный порт сервера:
Создайте правило rdr на маршрутизаторе (ваш Mac Pro), введя в Terminal.app:
sudo nano /private/etc/pf-rdr.rule
и содержание:
rdr on en1 inet proto tcp from any to 152.1.2.3 port = 9999 -> 192.168.2.3 port 80
предполагая, что en1 — это внешний интерфейс, 152.1.2.3:9999 — его IP-порт и 192.168.2.3:80 — IP-порт внутреннего сервера. Чтобы получить идентификатор устройства (и IP) вашего внешнего интерфейса, войдите ifconfig
в свой Mac Pro.
Затем создайте демон запуска:
sudo nano /Library/LaunchDaemons/org.user.pfrdr.plist
с содержанием:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>org.user.pfrdr</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/pfctl</string>
<string>-a</string>
<string>com.apple/portforwarding</string>
<string>-f</string>
<string>/private/etc/pf-rdr.rule</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Library/Logs/org.usr.pfrdr.log</string>
<key>StandardOutPath</key>
<string>/Library/Logs/org.usr.pfrdr.log</string>
</dict>
</plist>
Запустите демон командой:
sudo launchctl load /Library/LaunchDaemons/org.user.pfrdr.plist
Это добавит второе правило rdr в привязку com.apple к pf и перенаправит внешний порт на внутренний хост.
Поскольку DHCP назначает IP-адреса динамически, также полезно определить фиксированный IP-адрес для внутреннего сервера:
Создайте файл bootptab на маршрутизаторе (ваш Mac Pro):
sudo nano /etc/bootptab
с содержанием:
# Bootptab file
# Section 1 -- ignored
%%
# Section 2 -- used
# Hardware types: 1=Ethernet, 6=Wireless
# See http://www.ietf.org/rfc/rfc1700.txt
#
# machine entries have the following format:
#
# hostname hwtype hwaddr ipaddr bootfile
your-nas-ethernet 1 c4:2c:03:3a:7f:65 192.168.2.3 boot
a-wireless-machine 6 60:33:4b:27:6c:62 192.168.2.4 boot
another-ethernet 1 00:0d:93:72:e7:96 192.168.2.2 boot
Замените MAC-адреса (hwaddr) и типы оборудования (hwtype) на подходящие для вашей среды здесь. Вы можете получить MAC-адреса, введя ifconfig
соответствующий хост. После этого перезагрузите маршрутизатор (Mac Pro).
Последствия для безопасности:
При использовании вашего Mac Pro в качестве маршрутизатора он подвергается воздействию Интернета и как таковой уязвим. Pf в том виде, в каком он запускается после включения общего доступа к Интернету, не имеет абсолютно никаких блокирующих правил . Вы должны добавить целую кучу дополнительных правил, чтобы сделать его более безопасным (и работающим).
Опубликованный вами IP-адрес принадлежит 152.1.0.0/16 — блоку IP-адресов, присвоенному Университету штата Северная Каролина (NCSU). Ваш университет мог применить меры безопасности в этой сети, которые предотвратят доступ из других сетей (или «всего» Интернета).
Роб
Аллан
Аллан
кланомат