Tôi có một phiên bản AWS EC2, chạy Amazon Linux, có hai Giao diện mạng đàn hồi (ENI) được đính kèm: eth0 và eth1. Tôi đang kết nối với IP công cộng trên eth0. Mọi thứ đều hoạt động tốt, ngoại trừ tôi muốn định tuyến lưu lượng truy cập không được mã hóa ra khỏi eth1. tức là Khách hàng kết nối với eth0 để thiết lập một đường hầm VPN được mã hóa, sau đó lưu lượng truy cập internet không được mã hóa của họ được định tuyến vào / ra khỏi eth1 và quay lại đường hầm trên eth0.

Tôi không biết đủ về iptables để cấu hình này hoạt động, mặc dù đã cố gắng trong vài giờ. Tôi hy vọng đây là một trong những đơn giản?

Tôi đã cài đặt phiên bản OpenVPN mới nhất từ ​​nguồn và thực hiện những việc sau:

  1. Đã tắt kiểm tra nguồn / đích trên các giao diện
  2. Đã thêm phần sau vào "rc.local": echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
  3. Đã thêm các lệnh iptables sau: iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 443 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth0 -j MASQUERADE

Tệp cấu hình máy chủ của tôi trông giống như sau:

port 443
proto tcp-server
dev tun
tls-server
server 10.18.14.0 255.255.255.0

ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/vpnserver.crt
key /etc/openvpn/pki/vpnserver.key
dh /etc/openvpn/pki/dh.pem

ifconfig-pool-persist ipp2.txt 
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 5 15
comp-lzo
max-clients 5
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn_road.log
verb 6 
mute 20

tun-mtu 1500
auth SHA1
keysize 128
cipher BF-CBC
answer

Bạn cần thiết lập định tuyến, các quy tắc của bạn có vẻ ổn nhưng bạn cần thay đổi quy tắc MASQ.

iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth1 -j MASQUERADE

Tôi cũng sẽ đề xuất một số quy tắc đơn giản hơn cho các gói ban đầu của bạn.

# Allows packets from connections initiated by the box or already established
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Bây giờ đối với định tuyến, tôi giả sử bạn chỉ muốn các máy khách OpenVPN thoát qua eth1 chứ không phải máy chủ mà tôi cho rằng có tuyến mặc định thông qua eth0. Chúng tôi cần tạo một bảng định tuyến mới cho các máy khách OpenVPN của bạn, chúng tôi sẽ gọi nó là ovpn-inet.

Chỉnh sửa /etc/iproute2/rt_tables, chèn phần sau vào cuối và lưu.

1 ovpn-inet

Sau đó tạo /etc/sysconfig/network-scripts/route-eth1với nội dung sau, thay thế <gw on eth1>và các thuộc tính khác bên trong <>.

default via <gw for eth1> dev eth1 table ovpn-inet
<local network on eth1> dev eth1 src <eth1 ip adress> table ovpn-inet

Bây giờ tạo /etc/sysconfig/network-scripts/rule-eth1

from <ip address of eth1>/32 table ovpn-inet
from 10.18.14.0/24 table ovpn-inet
to <ip address of eth1>/32 table ovpn-inet

Một gợi ý cũng sẽ là chuyển OpenVPN sang UDP vì lợi ích của hiệu suất. Điều này cũng sẽ cho phép bạn chạy một máy chủ HTTPS nếu bạn cần nó qua TCP. Ngoài ra, hãy xem xét việc sử dụng tls-cryptcấu hình máy chủ OpenVPN của bạn như một cách đơn giản để thực hiện một chút khó khăn trong quá trình cài đặt của bạn.

proto udp4

Bây giờ khởi động lại mạng của bạn để thực hiện các thay đổi có hiệu lực.

/etc/init.d/network restart