AmazonLinuxを実行しているAWSEC2インスタンスがあり、2つのElastic Network Interface(ENI)が接続されています:eth0とeth1。eth0でパブリックIPに接続しています。暗号化されていないトラフィックをeth1からルーティングしたい場合を除いて、すべてがうまく機能します。つまり、クライアントはeth0に接続して暗号化されたVPNトンネルをセットアップし、暗号化されていないインターネットトラフィックはeth1に出入りし、eth0のトンネルを経由して戻ります。

数時間試したにもかかわらず、この設定を機能させるためのiptablesについて十分に知りません。これが単純なものだといいのですが?

ソースから最新バージョンのOpenVPNをインストールし、次のことを行いました。

  1. インターフェイスの送信元/宛先チェックを無効にしました
  2. 「rc.local」に以下を追加しました。 echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
  3. 次のiptablesコマンドを追加しました。 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

私のサーバー設定ファイルは次のようになります。

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

ルーティングを設定する必要があります。ルールは問題ないように見えますが、MASQルールを変更する必要があります。

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

また、発信パケットについて、より簡単なルールをいくつか提案します。

# 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

ルーティングに関しては、OpenVPNクライアントはeth1経由でのみ終了し、サーバー自体はeth0経由のデフォルトルートではないと想定しています。OpenVPNクライアント用に新しいルーティングテーブルを作成する必要があります。これをovpn-inetと呼びます。

編集/etc/iproute2/rt_tablesし、最後に以下を挿入して保存します。

1 ovpn-inet

次に/etc/sysconfig/network-scripts/route-eth1、次のコンテンツを使用して作成し、<gw on eth1>内のその他の属性を置き換えます<>

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

今作成する /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

パフォーマンスのために、OpenVPNをUDPに切り替えることもお勧めします。これにより、TCP経由で必要になった場合に、HTTPSサーバーを実行することもできます。またtls-crypt、インストールを少し強化する簡単な方法として、OpenVPNサーバー構成でを使用すること検討してください。

proto udp4

次に、ネットワークを再起動して、変更を有効にします。

/etc/init.d/network restart