Поскольку Вы сказали это, расширения файла Unix являются просто информацией. Вам просто нужен Ваш сценарий, чтобы иметь корректную хижину и быть исполняемым файлом.
У Вас не может или быть расширения или использования .sh
.
Я personnaly использую следующие конвенции, независимо от используемой оболочки (csh, tcsh, удар, sh...):
.sh
для классических сценариев, низко к высокой отметке.BatchyX уже дают некоторое очень хорошее объяснение о iptables и маршрутизацию, таким образом, я осуществлю свою лень и перейду непосредственно к сценарию.
Это должно NAT весь трафик для портирования 80,443,22,4070 до 192.168.0.91. Все остальные будут NAT до 192.168.1.254.
Я восстанавливаю свое тестирование и заканчиваю после этого руководства. То, что отсутствует в том руководстве, является последними 3 строками в моем сценарии. Который я нашел из другого порта, но я потерял след той ссылки.
Это - протестированный рабочий сценарий.
Нужен маршрут по умолчанию
Одна вещь я не вставил сценарий, настраивает маршрут по умолчанию. Это должно быть
route add default gw 192.168.1.254
Когда Вы делаете route -n
, это должен быть единственный маршрут по умолчанию (Dest:0.0.0.0)
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth1
fw-router.sh
# Reset/Flush iptables iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT #Reset/Flush/Setup IP Route (table 4) ip route flush table 4 ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table 4 $ROUTE ; done ip route add table 4 default via 192.168.0.1 #Mark Packet with matching D.Port iptables -t mangle -A PREROUTING -p tcp --dport 22 -s 10.0.0.0/24 -j MARK --set-mark 4 iptables -t mangle -A PREROUTING -p tcp --dport 80 -s 10.0.0.0/24 -j MARK --set-mark 4 iptables -t mangle -A PREROUTING -p tcp --dport 443 -s 10.0.0.0/24 -j MARK --set-mark 4 iptables -t mangle -A PREROUTING -p tcp --dport 4070 -s 10.0.0.0/24 -j MARK --set-mark 4 #SNAT Rules iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.74 iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 192.168.0.91 #IP Route ip rule add fwmark 4 table 4 ip route flush cache #IP Stack #This is the missing part from the guide echo 1 > /proc/sys/net/ipv4/ip_forward for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 0 > $f ; done echo 0 > /proc/sys/net/ipv4/route/flush
PS1: Короче говоря, MASQUERADE
не работает (в большей части случая, и определенно в Вашем случае) для NAT с несколькими внешний дюйм/с, которые нуждаются в некотором выравнивании нагрузки или нуждаются в DNAT для обработки входящего трафика. Вам нужно SNAT
для управления направлением.
PS2: Чистый iptables не достаточен.
Примечание: Я только рассмотрел первый сценарий, игнорируя старый.
route
и ip route
. Это - чистое зло. Просто используйте ip
везде и забудьте о ifconfig
и route
/etc/iproute2/rt_tables
не сбрасывается через перезагрузки. Добавление той же записи много раз не является хорошей идеей, только необходимо сделать это однажды. Помните это rt_tables
просто определите псевдонимы имени к числовым значениям, это не изменяет конфигурации.
Теперь для iptables
: В Вашем FORWARD
цепочка, Вы отбрасываете пакеты, прибывающие от LAN до 4G. Это плохо. FORWARD
рычаг используется после того, как маршрутизация сделана. На данном этапе вся маршрутизация политики сделана, и уже известно, должен ли пакет быть отправлен в 4G или ADSL. Нет никакого перенаправления, в котором выполняют FORWARD
или после FORWARD
(хорошо, технически, перенаправление может быть сделано после POSTROUTING
в серьезных случаях, но назад к точке).
Теперь для Вашей маршрутизации: Помните, что Ubuntu включает обратный путь, фильтрующий по умолчанию. Обратная фильтрация пути работает следующим образом: Когда ядро получает пакет (может оно быть переданным или не) от интерфейса A оно инвертирует исходный адрес и адрес назначения, и проверит, должен ли получающийся пакет быть направлен через интерфейс A. Если это не, пакет отбрасывается как попытка спуфинга адреса.
Для пакетов, полученных из eth0
, это не проблема. Для пакетов, полученных из eth1
, это - также не проблема, потому что при инвертировании исходного IP-адреса и целевого IP-адреса, ядро будет она маршрут по умолчанию в таблице main
. Для пакетов, полученных из eth2
, который Вы не отмечаете, это - проблема, потому что ядро поразит маршрут по умолчанию в таблице main
, и полагайте, что эти пакеты должны были быть получены из eth1
. Самое легкое решение состоит в том, чтобы отключить обратную фильтрацию пути на eth1:
sysctl -w net.ipv4.conf.eth1.rp_filter=0