У меня есть ПК с Ubuntu в качестве роутера. Он имеет 3G-соединение с общедоступным IP-адресом в Интернет, а также есть частная беспроводная подсеть. Итак, у него есть два активных интерфейса:
С участием iptables Я не хочу пересылать каждое соединение MySQL (порт 3306) на локальный компьютер (10.42.43.10) подсети.
Я набираю эти команды iptables:
iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 3306 -j DNAT --to 10.42.43.10:3306
iptables -A FORWARD -p tcp -i ppp0 -o wlan0 -d 10.42.43.10 --dport 3306 -j ACCEPT
Но не работает. telnet publicip 3306 не работает :-(
Любая помощь будет оценена по достоинству. Спасибо!
Не смог прокомментировать ответ, опубликованный Nilesh, поэтому я добавил это для всех, у кого могут возникнуть проблемы после этого шага
в связи с
echo 1 > /proc/sys/net/ipv4/ip_forward
это будет работать, только если вы являетесь пользователем root.
ты должен сделай это так
echo -n 1 | sudo tee /proc/sys/net/ipv4/ip_forward
echo -n
значит, нет конечного символа новой строки
sudo tee
так что вы можете писать в файл с увеличенными разрешениями
sudo echo > /file
не работает, если к / file нужно получить доступ как пользователь root, потому что sudo работает только с echo
функция, а не > /file
Правила кажутся правильными. Я думаю, вы не включили переадресацию IP в ядре. Есть два способа включить переадресацию IP:
echo 1 > /proc/sys/net/ipv4/ip_forward
Это будет сброшено при перезагрузке. Добавьте следующую строку в /etc/sysctl.conf:
net.ipv4.ip_forward = 1
И у вас должно получиться заставить его работать.
Вы можете создать туннель ssh для пересылки соединений. Это намного проще и безопаснее, чем использование iptables:
ssh -L ВАШ_УБЛИЧНЫЙ_IP: 3306: 10.42.43.10: 3306 ВАШ_ПОЛЬЗОВАТЕЛЬ@10.42.43.10
Вам нужно будет ввести учетные данные пользователя ssh, и будет выполнено перенаправление через туннель. Быстро, легко и безопасно :)