У меня есть роутер Broadcom BCM5352 с прошивкой DD-WRT и четырьмя внешними IP-адресами. В моей домашней конфигурации сети у меня сначала есть маршрутизатор, а затем коммутатор, подключенный к маршрутизатору (чтобы избежать нескольких кабелей через всю квартиру.
К коммутатору подключен сервер, и, если это возможно, я хотел бы дать этому серверу другой внешний IP-адрес (то есть указать маршрутизатору направлять весь трафик на указанный внешний IP-адрес на сервер и наоборот). У меня нет статических IP-адресов, мой интернет-провайдер предлагает только DHCP.
Так можно ли это настроить? Прошивка поддерживает iptables, поэтому, если это можно сделать с помощью iptables, это решение. Это можно сделать с помощью pf, где эта функция называется двунаправленным отображением nat (отображение 1: 1).
Во-первых, как упоминалось выше другим - я никогда не слышал, чтобы интернет-провайдер выдавал несколько IP-адресов с помощью DHCP. Возможно, вы захотите это проверить.
Все это не относится к DD-WRT:
... Если они действительно передают все это по DHCP, тогда вам понадобится несколько MAC-адресов на одной интерфейсной карте, или вам потребуется 4x NIC, все подключенные к коммутатору, который затем подключается к маршрутизатору вашего провайдера. Это b / c, DHCP-сервер будет продолжать передавать вам одни и те же IP-адреса, независимо от того, что все они находятся на одном MAC. Я не думаю, что Linux в любом случае может использовать несколько MAC на одном и том же сетевом адаптере.
После этого довольно просто:
- Используйте ip addr X.X.X.X dev eth0 (или любой другой сетевой адаптер, который вы используете на этой стороне) для каждого IP-адреса, которым вы хотите быть.
Вам нужно будет настроить NAT как обычно в iptables.
Затем вам нужно будет настроить DNAT (перенаправление портов) для направления входящего трафика на сервер. Вы настроите эти правила для пересылки на внутренний IP-адрес сервера ...
Если вы хотите, чтобы этот сервер всегда исходил с этого IP-адреса, вам также необходимо использовать для этого SNAT, и вам нужно будет отметить пакет в таблице mangle, а затем настроить для этого команду ip rule.
Все это делаем здесь на нашем роутере ...
2 80 DNAT tcp -- eth2 * 0.0.0.0/0 x.x.x.74 tcp dpt:53 to:10.10.x.5:53
0 0 DNAT udp -- eth2 * 0.0.0.0/0 x.x.x.74 udp dpt:53 to:10.10.x.5:53
1197 60064 DNAT all -- eth2 * 0.0.0.0/0 x.x.x.73 to:10.10.x.9
Chain POSTROUTING (policy ACCEPT 2686 packets, 403K bytes) pkts bytes target prot opt in out source destination 14613 903K SNAT all -- * eth0 0.0.0.0/0 0.0.0.0/0 to:xx.x.x.75 0 0 SNAT all -- * eth2 10.10.x.98 0.0.0.0/0 to:xxx.x.x.xx.69 178 11500 SNAT all -- * eth2 10.10.x.8 0.0.0.0/0 to:xx.xx.219.xx 0 0 SNAT all -- * eth2 10.10.x.9 0.0.0.0/0 to:xxx.xxx.xx.xx 1 60 SNAT all -- * eth2 10.10.x.18 0.0.0.0/0 to:xx.x.x.70 0 0 SNAT all -- * eth2 10.10.x.5 0.0.0.0/0 to:x.x.x.74 14327 871K SNAT all -- * eth2 0.0.0.0/0 0.0.0.0/0 to:x.x.x.66
и вот как будут выглядеть правила iproute2:
0: from all lookup local 18: from all fwmark 0x4 lookup T1 19: from all fwmark 0x3 lookup T1 20: from all lookup main 21: from x.x.x.0/20 lookup cable 22: from x.x.x.64/27 lookup T1 1000: from all lookup 110 2000: from all lookup main 32766: from all lookup main 32767: from all lookup default and the mangle table - this makes certain machines use those first to rules, so they exit out the right IP/interface: Chain PREROUTING (policy ACCEPT 1921K packets, 1149M bytes) pkts bytes target prot opt in out source destination 10 1304 MARK tcp -- eth1 * 10.10.x.18 0.0.0.0/0 tcp dpt:25 MARK set 0x3 0 0 MARK tcp -- eth1 * 10.10.x.9 0.0.0.0/0 tcp dpts:1719:1720 MARK set 0x4 0 0 MARK tcp -- eth1 * 10.10.x.9 0.0.0.0/0 tcp spts:60100:60200 MARK set 0x4 0 0 MARK udp -- eth1 * 10.10.x.9 0.0.0.0/0 udp spts:60100:60200 MARK set 0x4
Обратите внимание, как мы отмечаем TCP 25, чтобы всегда выходить по определенному маршруту. Это ваша почта будет возвращена, если у вас не будет IP, который указывает запись MX на многих принимающих серверах SMTP.
Я думаю, вы можете сделать это с помощью iptables, но это будет немного сложно, я не помню, но я изучал это много лет назад, и кто-то показал мне несколько образцов с динамическими IP-адресами. Затем я переключился на пару экземпляров брандмауэра виртуального сервера, поэтому у меня есть по одному на каждый внешний динамический (dhcp) ip - все через одну сетевую карту внешнего хоста (и да, они запускают Microsoft ISA прямо сейчас, но это на самом деле не имеет значения). Это казалось более простым, и мне почему-то нравится запускать свой брандмауэр и NAT-маршрутизатор на обычной серверной ОС;)
Многие интернет-провайдеры в Швеции раздают более одного общедоступного динамического IP-адреса через DHCP - 5 - это очень распространенная сумма по умолчанию, хотя, конечно, не все. Таким образом, вам действительно не нужно ломать голову против ужасов NAT для поддержки более одного хоста дома ... хотя пограничные брандмауэры потребительского уровня обычно не справляются с этим, я думаю ...
Да, это можно сделать с помощью iptables, однако вам необходимо назначить вам два IP-адреса от вашего интернет-провайдера. Я на 99% уверен, что единственный способ получить это - статические IP-адреса, я никогда не слышал, чтобы интернет-провайдер давал два IP-адреса через DHCP.
Вы искали форумы DD-WRT? Вот
Я запускаю DD-WRT на своем маршрутизаторе, и у меня есть интернет-провайдер, который назначает 5 IP-адресов DHCP. Однако я выбрал другой, более простой путь. У меня подключение к Интернету идет прямо в коммутатор, который затем подключается к моим серверам и к моему маршрутизатору DD-WRT. Каждое устройство получает собственный DHCP-IP, как если бы оно было подключено к собственной сети. Однако я все еще могу разговаривать со своими серверами со скоростью 100 Мбит / с (скорость моего коммутатора) по сравнению со скоростью моего интернет-соединения.
Другой вариант - просто подключить ваш сервер к маршрутизатору и сделать его сервером DMZ, это будет иметь аналогичный эффект, но ваш маршрутизатор и сервер будут использовать общий IP-адрес.
Четвертый и гораздо более сложный способ сделать это - использовать 2 сетевых адаптера на вашем сервере, а сервер добавить виртуальный интерфейс к своему исходящему соединению и связать этот виртуальный интерфейс с вашим маршрутизатором. Тогда у обоих устройств будет свой IP. (В этом случае сервер будет делать то, что вы заявили, что маршрутизатор должен делать)