Я пытаюсь настроить Linux-сервер как шлюз / маршрутизатор, но не могу заставить его работать, и вся информация, которую мне удалось найти, связана с NAT.
У меня есть общедоступный IP-блок для шлюза и устройств за ним, поэтому я хочу, чтобы шлюз просто перенаправлял пакеты в Интернет - опять же: без NAT!
Мне удалось получить шлюз для успешного доступа в Интернет (это было всего лишь вопросом настройки IP и GW), и компьютеры, стоящие за ним, могут связываться с ним.
[РЕДАКТИРОВАТЬ: подробнее]
Фактически это блок IPv6 (2800:40:403::0/48
) (но я обнаружил, что большинство утилит и инструкций можно легко адаптировать с IPv4 на IPv6 без особых усилий).
На сервере тоже есть порты:
2800:40:403::1/48
2800:40:403::3/48
Один из компьютеров позади него подключен к нему через переключатель;
2800:40:403::7/48
Интерфейс WAN на сервере может без проблем ping6 www.google.com. Интерфейс локальной сети на сервере и клиенте может без проблем взаимно пинговать друг друга (а также SSH и т. Д.).
Я попытался установить сервер в качестве шлюза по умолчанию для клиента, но безуспешно:
client # route -A inet6 add default gw 2800:40:403::3 dev eth1
server # cat /proc/sys/net/ipv6/conf/all/forwarding
1
Мне не нужны никакие фильтры / брандмауэры и т. Д., Просто маршрутизация.
Спасибо.
Включена ли пересылка?
echo 1 > /proc/sys/net/ipv4/ip_forward
Я предполагаю, что у вас есть один общедоступный IP-адрес для вашей стороны WAN и блок для стороны LAN, примерно так:
ISP-----ROUTER ETH0/ROUTER ETH1------SWITCH------PCs
Вам НЕОБХОДИМО иметь общедоступный IP-адрес для интерфейса WAN, интернет-провайдер будет маршрутизировать подсеть, которую они вам предоставили, через этот IP-адрес.
Просто вам нужно установить бит пересылки на 1
echo 1 > /proc/sys/net/ipv4/ip_forward
Чтобы сделать его постоянным, вам нужно отредактировать /etc/sysctl.conf, найти эту строку:
net.ipv4.ip_forward=0
и измените его на
net.ipv4.ip_forward=1
Не забудьте раскомментировать его, если он прокомментирован.
Теперь все, что вам нужно сделать, это настроить шлюз вашего компьютера по умолчанию так, чтобы он указывал на маршрутизатор Linux, и предполагая, что интернет-провайдер выполнил свою работу, направив блок через общедоступный IP-адрес для вашей локальной сети.
Сейчас. Если все, что у вас есть, это блок общедоступных адресов ... вы не изучаете маршрутизацию, просто подключите ISP к коммутатору, а все ПК к коммутатору, и это должно быть сделано. Если вы укажете более подробную информацию, мы сможем вам больше помочь.
Редактировать:
Вы говорите, что ваши интерфейсы настроены следующим образом:
wan: 2800:40:403::1/48
lan: 2800:40:403::3/48
Какой у вас шлюз по умолчанию? Я думаю, 2800: 40: 403 :: 2/48
Это не должно так работать. Я еще не работал с IPv6, но у вас есть два интерфейса в одной подсети, я думаю, я позволю вам настроить это, но скажу, что маршрутизатор Cisco по крайней мере предупредит вас о перекрытии
Самое простое решение - все ПК подключены к коммутатору, подключенному к провайдеру.
Реальное решение - попросить интернет-провайдера предоставить вам 1 публичный адрес в своем адресном пространстве для WAN и направить блок через этот адрес. Затем все, что вам нужно сделать, это настроить:
wan: ip-from-their-space
lan: 2800:40:403::1/48
И все локальные ПК должны указывать на него по умолчанию.
У вас очень большое адресное пространство, что вы можете сделать, это разбить его на подсети.
Редактировать:
Если вы действительно хотите соединить интерфейсы, вы можете сделать это без каких-либо привязок к IP. Таким образом, у вас будет только один интерфейс с IP-адресом.
Все, что вам нужно сделать, это установить bridge-utils, а затем настроить его следующим образом:
ip add flush dev eth0
ip add flush dev eth1
brctl addbr br0
brctl addif br0 eth0 eth1
ip link set dev br0 up
Затем настройте свой IPv6-адрес на br0, и теперь у вас есть прозрачный мост. Это все еще не решает вашу проблему с IPv4, но вы можете решить ее следующим образом:
Настройте публичный и частный адрес IPv4 на br0 и NAT следующим образом:
iptables -t nat -A ПОСТРОУТИРОВАНИЕ -j SNAT -s / --to-source